Laravel基本登入流程是這樣的。
圖示上層是看到的頁面,下層是Controller,如果沒有登入,進到 http://localhost/home 時會轉到 http://localhost/login 。
當我們要連到 /home 時,Route會呼叫HomeController.php
中的index
方法,不過打開該檔案看看會發現在這之前還有個__construct
方法要處理。
// HomeController.php
public function __construct()
{
$this->middleware('auth');
}
這邊是有指定Middleware來過濾什麼對象可以瀏覽 /home ,我們從app/Http/Kernel.php
可以看到這個auth是Authenticate.php
。
// Authenticate.php
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('login');
}
}
雖然圖示上我是標return login,但實際上是呼叫另一個Route,這條Route是定義在昨天提到的Auth::routes()
裡面(不記得的回去看)。假如已經登入了,則會繼續完成HomeController@index
,回傳 home 的 View;如果沒登入,最後會回傳 login 的 View,然後轉給LoginController.php
接手。
打開LoginController.php
會發現,**怎麼好像少了很多東西?!**對,這裡根本什麼都沒有。
這很正常,如果打開檔案發現它異常的簡短,就往它繼承的對象去找,我們用到的東西都在它繼承的對象那邊,可以來這邊看看原始碼。
酷。
註冊就簡單些,負責的controller是RegisterController.php
,和login一樣,實際上被Route呼叫的方法都是繼承自別人。
特別需要提的是表單驗證。
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:6', 'confirmed'],
]);
}
Validator::make
用來產生驗證器,$data
是放要驗證的資料,後面那串是驗證規則。
required
意思是必填欄位;string
這邊是資料格式;email
強調是Email格式;min
、max
是資料長度規定,比較常用是這幾個。
先筆記筆記,後面要做發文功能時會用到。