- 定義一個父類的request,然後搞倆子類request,在子類中實現差異(引用的LiuBo2015,記錄用)
正在學習 Laravel 5,最近用到了表單驗證請求,寫了一個表單請求驗證的例子,希望對和我一樣的新手有幫助。
使用 Artisan
命令建立一個表單驗證請求類,該類會被建立在 app/Http/Requests/Users
目錄下,可以根據實際情況改變路徑。
php artisan make:request Users/PermissionFormRequest
這個類是作為新增
和編輯
表單驗證的基類使用,其中只定義驗證規則和自定義的錯誤資訊。
use App\Http\Requests\Request;
class PermissionFormRequest extends Request {
protected $rules = [
'name' => ['required', 'unique:permissions,name'],
'display_name' => ['required'],
'description' => ['max:100'],
];
protected $messages = [
'name.unique' => '“許可權名稱”已存在。',
'name.required' => '必須填寫“許可權名稱”',
'display_name.required' => '必須填寫“許可權顯示名稱”。',
'description.max' => '“許可權說明”不能大於100個字。',
];
public function authorize()
{
return true;
}
}
在 app/Http/Requests/Users
目錄下建立一個 AddPermissionFormRequest
類用於新增
的表單驗證,該類繼承於 PermissionFormRequest
類。
class AddPermissionFormRequest extends PermissionFormRequest {
public function rules()
{
return $this->rules;
}
public function messages()
{
return $this->messages;
}
}
在 app/Http/Requests/Users
目錄下再建立一個 EditPermissionFormRequest
類用於編輯
的表單驗證,該類同樣繼承於 PermissionFormRequest
類,其中使用 $this->route()
來獲取 Uri 引數,這裡是獲取 {id}
。
class EditPermissionFormRequest extends PermissionFormRequest {
public function rules()
{
$id = $this->route('id');
$rules = $this->rules;
$rules['name'] = ['required', 'unique:permissions,name,'.$id];
return $rules;
}
public function messages()
{
return $this->messages;
}
}
在控制器類中加入型別提示。
use App\Http\Requests\Users\AddPermissionFormRequest;
use App\Http\Requests\Users\EditPermissionFormRequest;
...
public function store(AddPermissionFormRequest $request)
{
$permission = new Permission();
$permission->name = $request->get('name');
$permission->display_name = $request->get('display_name');
$permission->description = $request->get('description');
$permission->save();
return redirect(route('admin.users.permission.index'));
}
public function update(EditPermissionFormRequest $request, $id)
{
$permission = Permission::findOrFail($id);
$permission->name = $request->get('name');
$permission->display_name = $request->get('display_name');
$permission->description = $request->get('description');
$permission->save();
return redirect(route('admin.users.permission.index'));
}
當控制器的方法被呼叫前,表單請求已經驗證了,意味著你不需要在控制器裡寫任何的驗證邏輯。它已經驗證完了!
如果驗證失敗,使用者會收到一個重定向請求至上一個頁面。而錯誤資訊也已經儲存至 session 中方便檢視展示。
2.自定義規則:rule
本作品採用《CC 協議》,轉載必須註明作者和本文連結