Coder Social home page Coder Social logo

laravel-5.2-something-about-rookie-problem-'s Introduction

Laravel 5.2

這份文件主要是簡單敘述以及提到一些關於 laravel 5.2 會遇到的問題以及解決方法!

內容會不斷更新

Change History

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

1. 線上專案下載後重新建構

  1. 進入從 git 或 bitbuckit...等其他線上版控下載下來的專案

  2. (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

              -----------------基本上到這邊為止就可以將一個專案執行起來-----------------

2. 關於 Cache

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

3. 關於 Model

  1. 單獨建立新 model (例如 User ),輸入 php artisan make:model User
    ,就會在database/migrations 生成 users 資料表

  2. 建立 model (例如 User ) 時,想要一起產生一個資料庫遷移,輸入 php artisan make:model User -m

  3. 如果想要在目前的 model 裡增加 name 欄位,則直接執行方法 1,重點在下面紅色標記的 create 要改成 table

    修改前

    Schema::create('votes', function (Blueprint $table) {
    	$table->string('name');
    });

    修改後

    Schema::table('votes', function (Blueprint $table) {
    	$table->string('name');
    });
  4. 關於 Model 更詳細的內容

4. 關於 Controller

  1. 建立新 Controller (例如 UserController ),輸入 php artisan make:controller UserController就會在app/Http/Controllers 生成 UserController

  2. 關於 Controller 更詳細的內容

5. 關於 Request

  1. 建立新 Request (例如 UserRequest ),輸入 php artisan make:request UserRequest就會在app/Http/Requests 生成 UserRequest

  2. 關於 Request 更詳細的內容

6. 關於 route

laravel 5.2 的 route 都統一寫在 app/Http 底下的 route.php

  1. 例如回到首頁的路由 ( '/' )

    Route::get('/'), function() {
    	return '這是首頁';
    };
  2. 如有使用 blade 模板開發網頁(例如:main.blade.php ),可寫成如下:

    Route::get('/'), function() {
    	return view('main');
    };
  3. 當有多組相同的前綴路徑,可以將其 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')};
    });
  4. 當有多組相同的前綴路徑,且所使用的 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

  1. 關於 route 更詳細的內容

7. 如何在 Blade 使用 Form & HTML 語法

要能夠在 blade 使用 {!!Form!!} 必須要安裝套件,方法如下:

  1. 輸入 composer require "laravelcollective/html":"5.2.*"

  2. 新增 provider 到 config/app.php 裡面,如下所示:

    'providers' => [
    	Collective\Html\HtmlServiceProvider::class,
    ],
  3. 新增 aliases 到 config/app.php 裡面,如下所示:

    'providers' => [
    	'Form' => Collective\Html\FormFacade::class,
    	'Html' => Collective\Html\HtmlFacade::class,
    ],
  4. 關於 Blade 模板 更詳細的內容

8. laravel 使用 Google 或 Facebook 登入

laravel 有一個套件叫做 laravel/socialite,已經滿完美的結合 Google,Facebook,Twiter,GitHub...等登入系統,以下將會簡單示範如何使用 Facebook 登入

  1. 請先到 Facebook developer 申請登入系統 API
    教學連結:如何申請建立 Facebook APP ID 應用程式ID(此篇教學為網路上搜尋,引用自--香腸炒魷魚)

  2. 輸入:composer require laravel/socialite

  3. 新增 provider 到 config/app.php

    'providers' => [
    	Laravel\Socialite\SocialiteServiceProvider::class,
    ],
  4. 新增 aliases 到 config/app.php 裡面,如下所示:

    'providers' => [
    	'Socialite' => Laravel\Socialite\Facades\Socialite::class,
    ],
  5. 新增以下三段程式碼到 config底下的 services.php

    'facebook' => [
    	'client_id' => env('FB_CLIENT_ID'),
    	'client_secret' => env('FB_CLIENT_SECRET'),
    	'redirect' => env('FB_REDIRECT')
    ],
  6. 編輯 .env,在最下面新增您在 Facebook 申請的登入資訊,會有以下三項:

    FB_CLIENT_ID=填入您所申請的 fb_client_id
    FB_CLIENT_SECRET=填入您所申請的 fb_app_screct
    FB_REDIRECT=填入您要 redirect 的路徑
  7. 創建一個 Controller,這邊以 FacebookController 命名,輸入:php artisan make:controller FacebookController

  8. 在 FacebookController 新增以下兩個 function:

    class FacebookController extends Controller
    {
    	public function redirect()
    	{
    		return Socialite::driver('facebook')->redirect();
    	}
    
    	public function callback()
    	{
    		$user = Socialite::driver('facebook')->user();
    		dd($user);
    	}
    }
  9. 接著在 route.php 新增以下 2 組路由

    Route::get('auth/facebook', 'FacebookController@redirect')->name('google.login');
    Route::get('auth/facebook/callback', 'FacebookController@callback');
  10. 執行 php artisan serve,打開瀏覽器輸入:http://localhost:8000/facebook,就會順利看到 Facebook callback 回來的登入資訊,如下圖所示:

    登入資訊

此資訊表示 Facebook 登入成功
Google 登入步驟跟 Facebook 登入一模一樣,只需將上述 facebook 的地方改成 google 即可

9. 如何自定義驗證規則 (範例:年齡驗證)

在 laravel 5.2 中提供了可以自定義驗證規則的方法,以下我用簡單的年齡是否滿十八歲來當作範例

  1. 首先到 app/Providers,底下有一個檔案 AppServiceProvider.php

  2. 內容預設如下:

    class AppServiceProvider extends ServiceProvider
    {
    	public function boot()
    	{
    
    	}
    
    	public function register()
    	{
    		//
    	}
    }
  3. 寫入關於年齡驗證的規則與回應,以現在 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 裡面直接使用,如下所示

  4. app/Http/Requests,建立 UserRequests.php,可以直接用前面自定義好的 'birthday' 驗證規則,如下:

    public function rules()
    {
    	return [
    		'birthday' => ['required', 'birthday'],
    	];
    }
    
    public function messages() {
    	return [
    		'birthday.required' => '出生日期不能為空',
    		'birthday.birthday' => '您未滿十八歲'
    	];
    }
  5. 關於 自訂驗證規則 更詳細的內容

10. 如何利用 faker 產生測試資料

laravel 5.2 提供了一個功能 fzaninotto/Faker,讓開發者可以快速產生測試資料,對於開發中的測試及網頁顯示非常的便利,以下我會用基本的 User 資料來當作範例

  1. 建立一個新的專案,輸入:composer create-project laravel/laravel learn-factory "5.2.*"

  2. 編輯 .env

    DB_DATABASE=database 的名字
    DB_USERNAME=database 的使用者
    DB_PASSWORD=database 的密碼
  3. 更新 faker,輸入:composer require fzaninotto/faker

  4. 進入 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');
    	}
    }
  5. 進入 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,
    	];
    });
  6. 在這邊我們需要指定測試資料的呈現方式是 中文,於是我們到 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');
    	});
    }
  7. 輸入:php artisan migrate 建立 table

  8. 輸入:php artisan tinker 進入 laravel 內建的 REPL (read-eval-print-loop),REPL是指交互式命令行界面

  9. 進入後,輸入: namespace App,接著再輸入:factory(User::class, 5)->make();,如果有產生如下圖的資料就表示一切都正確接上囉!

    正確

    注意這邊我是先用 make() 來確定一切正確無誤

  10. 最後要寫入資料庫則是要改成輸入:factory(User::class, 5)->create();,
如果一切正確無誤就會如下圖所示:

    正確寫入資料庫

    正確寫入資料庫

10. 如何自定義命令

我們一般常用的命令有 php artisan servephp artisan make:model....等其他命令,那如果我們想要創建自己的命令該怎麼做呢?

  1. 輸入 php artisan make:console Hello,就會在 app/Console/Commands 底下生成 Hello.php

  2. 修改 Hello.php,預設內容如下:

    class Hello extends Command
    {
    	protected $signature = 'command:name';
    	protected $description = 'Command description';
    
    	public function __construct()
    	{
    		parent::__construct();
    	}
    
    	public function handle()
    	{
    		//
    	}
    }
  3. 修改如下:

    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');
    	}
    }
  4. app/Console 底下的 Kernel.php 註冊,如下所示:

    protected $commands = [
    	Commands\Hello::class,
    ];
  5. 最後在命令提示輸入 php artisan laravel:hello,就會輸出 Hello Laravel 5.2

  6. 關於 Commands 更詳細內容

laravel-5.2-something-about-rookie-problem-'s People

Contributors

blaze0207 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.