其他驗證方法
1)表單請求驗證
你可以建立一個表單請求,它可以儲存應用程式中特定請求的授權邏輯,驗證規則和錯誤訊息。
make:request
Artisan CLI 命令生成類並將其放在 app/Http/Requests
目錄中:
php artisan make:request StoreBlogPostRequest
可以使用此請求的授權邏輯覆蓋 authorize
方法:
public function authorize()
{
return $this->user()->can('post');
}
可以使用此請求的特定規則覆蓋 rules
方法:
public function rules()
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
可以使用此請求的特定訊息覆蓋 messages
方法:
public function messages()
{
return [
'title.required' => 'A title is required',
'title.unique' => 'There is another post with the same title',
'title.max' => 'The title may not exceed :max characters',
'body.required' => 'A message is required',
];
}
為了驗證請求,只需在相應的控制器方法上鍵入提示特定的請求類。如果驗證失敗,將傳送錯誤響應。
public function store(StoreBlogPostRequest $request)
{
// validation passed
}
2)手動建立驗證器
為了獲得更大的靈活性,你可能需要手動建立 Validator,並直接處理失敗的驗證:
<?php
namespace App\Http\Controllers;
use Validator;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class PostController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
// Store the blog post...
}
}
2)流利地建立規則
有時你可能需要動態建立獨特的規則,在服務提供商中使用 boot()
方法可能會超出頂部,從 Laravel 5.4 開始,你可以使用 Rule
類流暢地建立新規則。
作為一個例子,當你想插入或更新使用者時,我們將使用 UserRequest
。現在我們想要一個名字,電子郵件地址必須是唯一的。使用 unique
規則的問題在於,如果你正在編輯使用者,他們可能會保留相同的電子郵件,因此你需要從規則中排除當前使用者。以下示例顯示瞭如何通過使用新的 Rule
類輕鬆完成此操作。
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class UserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules(Request $request)
{
$id = $request->route()->getParameter('user');
return [
'name' => 'required',
// Notice the value is an array and not a string like usual
'email' => [
'required',
Rule::unique('users')->ignore($id)
]
];
}
}