2016年10月3日 星期一

[laravel 5.3] Route::auth() 的路由?

Lavavel 提供一個快速的指令來建立認證所要用到的東西

php artisan make:auth

這些指令會產生一些view 、所有認證的路由跟HomeController

最後要在route建立一個認證路由
Route::auth();

這個路由是由一些路由組成
// Authentication Routes
Route::get('login', 'App\Http\Controllers\Auth\LoginController@showLoginForm');
Route::post('login', 'App\Http\Controllers\Auth\LoginController@login');
Route::get('logout', 'App\Http\Controllers\Auth\LoginController@logout');

// Registration Routes
Route::get('register', 'App\Http\Controllers\Auth\RegisterController@showRegistrationForm');
Route::post('register', 'App\Http\Controllers\Auth\RegisterController@register');

// Password Reset Routes
Route::get('password/reset/{token}', 'App\Http\Controllers\Auth\ResetPasswordController@showResetForm');
Route::post('password/email', ' App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail');
Route::get('password/reset','App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm');
Route::post('password/reset', 'App\Http\Controllers\Auth\ResetPasswordController@reset');

可以使用指令來查看php artisan route:list

參考來源
https://laravel.tw/docs/5.3/authentication

[PHP]cURL error 60: SSL certificate problem: unable to get local issuer certificate

目前專案使用laravel,串接FB openid時出現這個錯誤,

查了一下,當使用xampp有用到curl時,都有可能會出現

cURL error 60: SSL certificate problem: unable to get local issuer certificate

最簡單的方式,進入到php.ini
將以下輸入進去,XAMPP預設的位置在這下面,當然也可以更換路徑
curl.cainfo = "C:/xampp/apache/bin/curl-ca-bundle.crt"

在不行的去curl官方抓取cacert.pem
放置到你想要的目錄下,這邊我們放置到以下位置,所以php.ini要對應路徑
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"

目前試過這兩樣都可以

2015年8月25日 星期二

[PHP] 建立Laravel Homestead (for windows)

簡介

Laravel Homestead 是一個官方預載的 Vagrant「box」,就是一般虛擬機器一樣,當系統有什麼問題時,就砍掉並重新建立,又是一個乾淨的環境,並含有基本的Laravel 建立環境。

Homestead 可以在任何 Windows、Mac 或 Linux 上面運行,
裡面包含了 Nginx 網頁伺服器、PHP 5.6、MySQL、Postgres、Redis、Memcached、Node,
以及所有你在使用 Laravel 開發各種精彩的應用程式時所需要的軟體。

一、前置動作

在啟動你的 Homestead 環境之前,你必須先安裝 VirtualBox 或 VMWare 以及 Vagrant。
本文介紹是安裝VirtualBox (VirtualBox-4.3.30-101610-Win)。

二、安裝 Homestead Vagrant box

在終端機輸入以下指令,將 'laravel/homestead' 這個 box 安裝進你的 Vagrant 程式中。

vagrant box add laravel/homestead

三、手動clone Homestead 資源庫

將資源庫clone到你的目錄中,如此一來 Homestead box 將能提供主機服務給你所有的 Laravel 專案。(本文在c:\111下輸入下列指令)

git clone https://github.com/laravel/homestead.git Homestead

建完之後,可以到所要建立目錄中的 Homestead 資料夾,點擊init.sh
(目錄位置c:\111\Homestead )

這個資料會建立在windows c:\Users\用戶名稱\.homestead
(會產生三個檔案after.sh、aliases、Homestead.yaml)

四、設定你的 Provider

在 Homestead.yaml 檔案中的 provider 參數是用來設定你想要使用哪一個 Vagrant provider: virtualbox 或 vmware_fusion。
根據你的喜好來決定 provider:修改Homestead.yaml裡面內容 provider: virtualbox

五、設定你的 SSH 金鑰

這部分先跳過,之後再來使用

六、設定共享資料夾

你可以在 Homestead.yaml 檔案的 folders 屬性裡列出所有你想與你的 Homestead 環境共享的資料夾。這邊可以設定為

folders:
- map: C:\111\laravel            //windows內的程式
to: /home/vagrant/laravel      //對應到homestead的位置

七、設定 Nginx 網站

你可以在 Homestead.yaml 設定sites屬性,可以為開發中的Laravel提供更方便虛擬化環境

sites:
- map: homestead.app
to: /home/vagrant/laravel/public

八、關於 Hosts 檔案

在 Windows 上,則存放於 C:\Windows\System32\drivers\etc\hosts。你要設定於檔案中的內容類似如下:

192.168.10.10  homestead.app

九、啟動 Vagrant box

編輯完成Homestead.yaml 後、進入你的Homestead目錄並執行vagrant up指令。
Vagrant 就會建立啟動虛擬主機並設定你的共享資料夾。
如果要移除虛擬主機則輸入vagrant destory --force

十、測試

務必確認 IP 位置與 Homestead.yaml 檔案中設定的相同。一旦你將網域設定在 hosts 檔案之後,你就可以透過網頁瀏覽器造訪你的網站!

 http://homestead.app

備註:

※如果網頁結果為No input file specified.
結果要先檢查路徑有沒有問題,還是出現同樣問題的話,就在終端機下輸入:vagrant provision。
※vagrant ssh 登入之後,可以檢查共享的資料夾有沒有正確
※ssh預設的帳號密碼是vagrant
※sql預設的帳號密碼是homestead/secret


參考網址:http://laravel.tw/docs/5.1/homestead



2015年8月12日 星期三

[PHP] PDO操作(三)

這節介紹PDO->exec(sql)

語法:
PDO->exec( sql )
說明:
針對沒有返回結果的操作,例如insert、update、dalete等等
實作:
$sql = "INSERT INTO user (Name, Email)VALUES('AAA','test@gmail.com')";
$count = $db->exec($sql);
echo "寫入".$count."筆資料";

$sql = "UPDATE user SET Email = 'test@yahoo.com' WHERE Name = 'AAA'";
$count = $db->exec($sql);
echo "更新".$count."筆資料";



也可以使用預處理的方式
預處理可以把要運行的SQL當作一種模板,可以帶來兩種好處
第一種:查詢只需處理一次就可以讓相同或不同的參數執行多次,通常可以使處理速度加快
第二種:安全性問題,可以確保不會有sql注入發生。

實作:
$sql = "INSERT INTO user (Name, Email)VALUES(':Name,:Email)";
$stmt = $db->prepare($sql);
$stmt->bind_param(':Name',$name);
$stmt->bind_param(':Email',$email);
$stmt->execute();

或是這樣也可以
$sql = "INSERT INTO user (Name, Email)VALUES(':Name,:Email)";
$stmt = $db->prepare($sql);
$query->execute(
array(':Name' => 'AAA',
      ':Email' => 'test@gmail.com'
));

也有可以帶入?的方式
$sql = "INSERT INTO user (Name, Email) VALUES (?, ?)";
$stmt = $db->prepare($sql);
$stmt->bind_param('AAA', 'test@gmail.com');
$stmt->execute();
或是
$sql = "INSERT INTO user (Name, Email) VALUES (?, ?)";
$stmt = $db->prepare($sql);
$stmt->execute(
array(':Name' => 'AAA',
  ':Email' => 'test@gmail.com'
));

[PHP] PDO操作(二)

這節介紹PDO->query

語法:
PDO->query(sql);
說明:
用來查詢資料,並返回結果(像是select操作)
實作:
可以使用這種方式
$stmt = $db->query($sql);
while($row = $stmt->fetch()){
print_r($row);
echo "<br />";
}
或是這種方式
$stmt = $db->query($sql);
foreach($stmt as $row){
print_r($row);
echo "<br />";
}



語法:
PDOStatement->fetch(mode)
說明:
PDO的fetch()方法用來獲取一行結果,相當於一般的mysql_fetch_array
實作:
$stmt = $db->query($sql);
while($row = $stmt->fetch()){
print_r($row);
echo "<br />";
}



mode為可選參數
PDO::FETCH_ASSOC  [以索引組成(陣列型態)]
ex:
[Flag] => 1
[Name] => John

PDO::FETCH_NUM  [以數字索引組成(陣列型態)]
ex:
[0] => 1
[1] => John

PDO::FETCH_BOTH  [預設值:索引跟數字索引都有(陣列型態)]
ex:
[Flag] => 1
[0] => 1
[Name] => John
[1] => John

PDO::FETCH_OBJ  [以索引組成(物件型態)]
PDO::FETCH_BOUND  [透過bindColumn()的方法將列的值列在變數上]
PDO::FETCH_CLASS  [不知]
PDO::FETCH_INTO  [不知]
PDO::FETCH_LAZY  [不知]


語法:
PDOStatement->setFetchMode()
說明:
如果不在fetch()中指定返回結果類型
實作:
$stmt = $db->query($sql);
$stmt->setFetchMode(mode);
while($row = $stmt->fetch()){
print_r($row);
echo "<br />";
}



語法:
PDOStatement->fetchAll(mod,[int column_index])
說明:
fetchAll()用來把資料一次取出並存放到陣列中
mode為可選參數如下:
PDO::FETCH_COLUMN  [指定返回某一列,有column_index參數指定]
PDO::FETCH_UNIQUE  [不知]
PDO::FETCH_GROUP  [不知]

2015年8月11日 星期二

[PHP] PDO操作(一)

PDO (PHP Data Object) 在php6時將以預設的資料庫處理,
所以必須了解一下

使用PDO方式連線資料庫部分建立

一開始先設定初始值
$dbtype_sql = 'mysql';
$host = 'localhost';
$act = 'root';
$pwd = '....';
$dbname = 'db_name';

接著建立連線
try {
$db = new PDO($dbtype_sql . ':host=' . $host . ';dbname=' . $dbname, $act, $pwd);
// 資料庫使用 UTF8 編碼
$db->query('SET NAMES UTF8');
echo '連線成功';

} catch (PDOException $e) {
echo '連線未成功。問題拋出:',$e->getMessage();
exit;
}

下一節建立基礎的操作教學

2015年8月3日 星期一

[css] media query的呼叫方法

media query要支援CSS3才能正常作業,IE8以下則不支援,
在這邊media query的呼叫方法有以下幾種:

1、在html中呼叫css檔案
<link rel="stylesheet" media="screen and (min-width:400px) and (max-width:700px)" href="main.css" />

2、使用@import方法
@import "main.css" screen and (min-width:400px) and (max-width:700px)

3、直接寫在CSS檔裡面
@media screen and (min-width:400px) and (max-width:700px) {
    a {
  color:blue;
  }
}

以上範例(min-width:400px) and (max-width:700px)是說
當視窗寬度在400px~700px時,會套用css檔,
而最多人使用當然是第三種了。


除了width之外,還有一個device-width可以使用,如
@media screen and (max-device-width:700px) {
  a {
  color:blue;
    }
}
以上範例(max-device-width:700px)是說
當裝置寬度在700px時,會套用css檔

media query中,以上這兩個有何不同?
我們可以使用min-width和max-width來判斷使用者視窗的寬度,
而min-device-width和max-device-width則是使用者裝置的最大寬度,
所以device-width大部分是用在判斷手機寬度。