2018/09/06

[Laravel] Form Request

Form Request 建立時預設會產生

// 授權可否使用此Request
public function authorize();

// 驗證規則
public function rules();


另外還有兩個方法可以設定

// 錯誤文字的回應格式,與 lang 下的 validation 合併
public function messages() : array;

// 欄位的顯示名稱,與 lang 下的 validation.attributes 合併
public function attributes() : array;


在 Controller 可以直接使用 validated 拿到 rules 定義的資料

public function update(FormRequest $request)
{
$data = $request->validated();
}


以上的設定方式與以下等效

$data = $request->validate($rules, $messages, $attributes);


不過這樣會讓 Controller 變大,而且沒遵守 SRP

ps.
illuminate\Http\Request::validate 這個 method 是 另外用 Macro 加進去的,
api是找不到的。

SourceCode:
https://github.com/laravel/framework/blob/5.5/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php#L36

2018/09/05

[Laravel] 利用 intended 跳回之前的頁面

有時候需要記錄網址,做完某些事情之後再跳回去。

例如:訪問一個需要登入的頁面,先跳去登入,登入成功後在跳回。

Laravel 原生就有一個

redirect()->intended();

可以做到這件事情

不過你需要記錄你從哪跳來的

session()->put('url.intended', url()->previous());


intended 裡面可以傳入失效的備援網址

redirect()->intended('/');

這樣即使 session.url.intended 失效也會跳回首頁