這份文件主要是簡單敘述以及提到一些關於 laravel 5.2 會遇到的問題以及解決方法!
內容會不斷更新
Date | Description | Author |
---|---|---|
2017-11-20 | 新增--1. 線上專案下載後重新建構 | blaze0207 |
新增--2. 關於 Cache | blaze0207 | |
新增--3. 關於 Model | blaze0207 | |
新增--4. 關於 Controller | blaze0207 | |
新增--5. 關於 Request | blaze0207 | |
新增--6. 關於 route | blaze0207 | |
新增--7. 如何在 Blade 使用 Form & HTML 語法 | blaze0207 | |
新增--8. laravel 使用 Google 或 Facebook 登入 | blaze0207 | |
2017-11-21 | 新增--9. 如何自訂義驗證規則 | blaze0207 |
新增--10. 如何利用 faker 產生測試資料 | blaze0207 | |
2017-12-08 | 新增--11. 如何自訂義命令 | blaze0207 |
-
進入從 git 或 bitbuckit...等其他線上版控下載下來的專案
-
(a). 如果本地端與線上端的 PHP 版本不同(如: PHP5 和 PHP7 ),則須先刪除
composer.lock
(b). 輸入
composer install
,讓專案執行安裝程序(c). 輸入
cp .env.example .env
,複製 .env.example 成 .env(d). 輸入
php artisan key:generate
,產生一組加密的 APP_KEY(e). 編輯
.env
,基本設定主要是 database 的部分:DB_DATABASE=database 的名字 DB_USERNAME=database 的使用者 DB_PASSWORD=database 的密碼
(f). 如果此專案有 database,輸入:
php artisan migrate
,若無則可略過此步驟(g). 輸入
php artisan serve
,執行專案,預設路徑:http://localhost:8000
-----------------基本上到這邊為止就可以將一個專案執行起來-----------------
laravel 5.2 有時候會遇到需要清除 cache 的時候,以下列出常見清除 cache 的方法
(a). 修改
或 新增
或 刪除
blade 網頁,輸入:php artisan view:clear
(b). 變更 .env
,輸入:php artisan config:clear
(c). 變更 route.php
,輸入:php artisan route:clear
(個人覺得不太需要使用到)
(d). 變更一些資料的內容並希望能夠及時更新,輸入:php artisan cache:clear
-
單獨建立新 model (例如 User ),輸入
php artisan make:model User
,就會在database/migrations
生成 users 資料表 -
建立 model (例如 User ) 時,想要一起產生一個資料庫遷移,輸入
php artisan make:model User -m
-
如果想要在目前的 model 裡增加 name 欄位,則直接執行方法 1,重點在下面紅色標記的 create 要改成 table
修改前
Schema::create('votes', function (Blueprint $table) { $table->string('name'); });
修改後
Schema::table('votes', function (Blueprint $table) { $table->string('name'); });
-
關於 Model 更詳細的內容
-
建立新 Controller (例如 UserController ),輸入
php artisan make:controller UserController
就會在app/Http/Controllers
生成 UserController -
關於 Controller 更詳細的內容
-
建立新 Request (例如 UserRequest ),輸入
php artisan make:request UserRequest
就會在app/Http/Requests
生成 UserRequest -
關於 Request 更詳細的內容
laravel 5.2 的 route 都統一寫在 app/Http
底下的 route.php
-
例如回到首頁的路由 ( '/' )
Route::get('/'), function() { return '這是首頁'; };
-
如有使用 blade 模板開發網頁(例如:main.blade.php ),可寫成如下:
Route::get('/'), function() { return view('main'); };
-
當有多組相同的前綴路徑,可以將其 Group 起來,例如有('/api/main','/api/info','/api/article'),可寫成如下:
Route::group(['prefix' => 'api'], function () { Route::get('main', function(){ return view('main')}; Route::get('info',function(){ return view('info')}; Route::get('article',function(){ return view('article')}; });
-
當有多組相同的前綴路徑,且所使用的 Controller 也一樣,可改寫成如下較為簡潔的寫法
Route::group(['prefix' => 'api'], function () { Route::get('main', UserController@main); Route::get('info', UserController@info); Route::get('article', UserController@article); });
其中 @main,@info,@article 個別代表 UserController 裡的 public function
- 關於 route 更詳細的內容
要能夠在 blade 使用 {!!Form!!}
必須要安裝套件,方法如下:
-
輸入
composer require "laravelcollective/html":"5.2.*"
-
新增 provider 到
config/app.php
裡面,如下所示:'providers' => [ Collective\Html\HtmlServiceProvider::class, ],
-
新增 aliases 到
config/app.php
裡面,如下所示:'providers' => [ 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, ],
-
關於 Blade 模板 更詳細的內容
laravel 有一個套件叫做 laravel/socialite,已經滿完美的結合 Google,Facebook,Twiter,GitHub...等登入系統,以下將會簡單示範如何使用 Facebook 登入
-
請先到 Facebook developer 申請登入系統 API
教學連結:如何申請建立 Facebook APP ID 應用程式ID(此篇教學為網路上搜尋,引用自--香腸炒魷魚) -
輸入:
composer require laravel/socialite
-
新增 provider 到
config/app.php
'providers' => [ Laravel\Socialite\SocialiteServiceProvider::class, ],
-
新增 aliases 到
config/app.php
裡面,如下所示:'providers' => [ 'Socialite' => Laravel\Socialite\Facades\Socialite::class, ],
-
新增以下三段程式碼到
config
底下的 services.php'facebook' => [ 'client_id' => env('FB_CLIENT_ID'), 'client_secret' => env('FB_CLIENT_SECRET'), 'redirect' => env('FB_REDIRECT') ],
-
編輯
.env
,在最下面新增您在 Facebook 申請的登入資訊,會有以下三項:FB_CLIENT_ID=填入您所申請的 fb_client_id FB_CLIENT_SECRET=填入您所申請的 fb_app_screct FB_REDIRECT=填入您要 redirect 的路徑
-
創建一個 Controller,這邊以 FacebookController 命名,輸入:
php artisan make:controller FacebookController
-
在 FacebookController 新增以下兩個 function:
class FacebookController extends Controller { public function redirect() { return Socialite::driver('facebook')->redirect(); } public function callback() { $user = Socialite::driver('facebook')->user(); dd($user); } }
-
接著在
route.php
新增以下 2 組路由Route::get('auth/facebook', 'FacebookController@redirect')->name('google.login'); Route::get('auth/facebook/callback', 'FacebookController@callback');
-
執行
php artisan serve
,打開瀏覽器輸入:http://localhost:8000/facebook
,就會順利看到 Facebook callback 回來的登入資訊,如下圖所示:
此資訊表示 Facebook 登入成功
Google 登入步驟跟 Facebook 登入一模一樣,只需將上述 facebook 的地方改成 google 即可
在 laravel 5.2 中提供了可以自定義驗證規則的方法,以下我用簡單的年齡是否滿十八歲來當作範例
-
首先到
app/Providers
,底下有一個檔案AppServiceProvider.php
-
內容預設如下:
class AppServiceProvider extends ServiceProvider { public function boot() { } public function register() { // } }
-
寫入關於年齡驗證的規則與回應,以現在 2017 當標準,也就是說 19991231 後出生的人都算未滿十八歲
記得在最上面要引入
use Illuminate\Support\Facades\Validator;
,不然會報錯說 Validator 找不到或是未定義
birthday :自定義規則的名稱
$attribute:要被驗證的屬性名
$value :要被驗證的值class AppServiceProvider extends ServiceProvider { public function boot() { Validator::extend('birthday', function($attribute, $value) { if (! is_string($value) && ! is_numeric($value)) { return false; } return $value > 19991231 ? false : true }); } public function register() { // } }
到這邊基本上一個簡易的年齡驗證就完成了,剩下就是去 request 裡面直接使用,如下所示
-
到
app/Http/Requests
,建立 UserRequests.php,可以直接用前面自定義好的'birthday'
驗證規則,如下:public function rules() { return [ 'birthday' => ['required', 'birthday'], ]; } public function messages() { return [ 'birthday.required' => '出生日期不能為空', 'birthday.birthday' => '您未滿十八歲' ]; }
-
關於 自訂驗證規則 更詳細的內容
laravel 5.2 提供了一個功能 fzaninotto/Faker,讓開發者可以快速產生測試資料,對於開發中的測試及網頁顯示非常的便利,以下我會用基本的 User 資料來當作範例
-
建立一個新的專案,輸入:
composer create-project laravel/laravel learn-factory "5.2.*"
-
編輯
.env
DB_DATABASE=database 的名字 DB_USERNAME=database 的使用者 DB_PASSWORD=database 的密碼
-
更新 faker,輸入:
composer require fzaninotto/faker
-
進入
database/migrations
,修改 laravel 在創建的時候預設的 users 資料表,修改如下:class CreateUsersTable extends Migration { public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('phone'); $table->string('email')->unique(); $table->string('address'); $table->timestamps(); }); } public function down() { Schema::drop('users'); } }
-
進入
database/factories
,修改ModelFactory.php
,如下:這邊主要是去定義假資料的型態以及內容,更詳細有關 $faker 有哪些方法可用,可以直接看原始碼
Generator.php
,路徑:/vendor/fzaninotto/faker/src/Faker/Generator.php
$factory->define(App\User::class, function (Faker\Generator $faker { return [ 'name' => $faker->name, 'phone' => '09'.$faker->randomNumber(8, true), 'email' => $faker->unique()->safeEmail, 'address' => $faker->address, ]; });
-
在這邊我們需要指定測試資料的呈現方式是 中文,於是我們到
app/Providers
,修改AppServiceProvider.php
如下:引入
use Faker\Generator as FakerGenerator;
引入
use Faker\Factory as FakerFactory;
public function boot() { $this->app->singleton(FakerGenerator::class, function() { return FakerFactory::create('zh_TW'); }); }
-
輸入:
php artisan migrate
建立 table -
輸入:
php artisan tinker
進入 laravel 內建的 REPL (read-eval-print-loop),REPL是指交互式命令行界面 -
進入後,輸入:
namespace App
,接著再輸入:factory(User::class, 5)->make();
,如果有產生如下圖的資料就表示一切都正確接上囉!注意這邊我是先用 make() 來確定一切正確無誤
-
最後要寫入資料庫則是要改成輸入:
factory(User::class, 5)->create();
, 如果一切正確無誤就會如下圖所示:
我們一般常用的命令有 php artisan serve
,php artisan make:model
....等其他命令,那如果我們想要創建自己的命令該怎麼做呢?
-
輸入
php artisan make:console Hello
,就會在app/Console/Commands
底下生成 Hello.php -
修改
Hello.php
,預設內容如下:class Hello extends Command { protected $signature = 'command:name'; protected $description = 'Command description'; public function __construct() { parent::__construct(); } public function handle() { // } }
-
修改如下:
class Hello extends Command { protected $signature = 'laravel:hello'; protected $description = 'test laravel command'; public function __construct() { parent::__construct(); } public function handle() { $this->info('Hello Laravel 5.2'); } }
-
去
app/Console
底下的 Kernel.php 註冊,如下所示:protected $commands = [ Commands\Hello::class, ];
-
最後在命令提示輸入
php artisan laravel:hello
,就會輸出 Hello Laravel 5.2 -
關於 Commands 更詳細內容