在建立一個文章的時候,如果你什麼都不輸入直接提交,ok,你獲得了一個空的文章,沒有任何錯誤提示,這是不對的。在命令列下執行 php artisan
可以看到一個選項 make:request
,新建一個form request類別。在命令列執行
<code>php artisan make:request CreateArticleRequest</code>
產生的檔案在 app/http/requests
目錄下。在文件中我們可以看到兩個方法:
<code> public function authorize() { return false; } public function rules() { return [ // ]; }</code>
authorize
表示用戶在提交表單的時候是否需要是認證用戶,我們不需要認證,回傳 true。 rules
是我們的規則方法。讓我們修改這個方法:
<code> public function authorize() { //修改为 true,表示不需要认证,或者是通过认证 return true; } public function rules() { return [ 'title' => 'required|min:3', 'body' => 'required', 'published_at' => 'required|date' ]; }</code>
其他的限制可以插看 laravel 的文件。上面的約束表示 title
是必須輸入的,最少3個字符,body
是必須的,published_at
是必須的而且是日期。
在視圖中,我們總是可以存取 $errors
變數來判斷我們是否有錯誤,修改視圖
<code> @if ($errors->any()) <ul class="alert alert-danger"> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> @endif {{--使用我们添加的 illuminate\html 开源库--}} {!! Form::open(['url' => 'articles']) !!}</code>
修改控制器,引入我們的 Request 類別。
<code> public function store(Requests\CreateArticleRequest $request) { Article::create($request->all()); return redirect('articles'); }</code>
再次提交表單,什麼都不填,可以看到錯誤訊息。
修改提示訊息變成中文
顯示的是英文的錯誤訊息,實際上laravel考慮到了國際化的問題,首先修改 config/app.php
,
<code> 'locale' => 'zh',</code>
將 locale 語言設定為中文,然後再 resources/lang
下面新建資料夾 zh
, 拷貝 resources/lang/en/validation.php
檔案到 zh
目錄下,修改:
<code> "min" => [ "numeric" => "The :attribute must be at least :min.", "file" => "The :attribute must be at least :min kilobytes.", "string" => ":attribute 至少要包含 :min 字符。", "array" => "The :attribute must have at least :min items.", ], "required" => ":attribute 必须填写。",</code>
min:3 的判斷也為最少3個中文。
laravel 也在控制器中整合了
validate 方法,換句話說,我們不一定要產生 request 類,這些工作我們可以直接在控制器中完成。
<code> //注意 Request 的命名空间,不要弄错了 public function store(\Illuminate\Http\Request $request) { $this->validate($request, [ 'title' => 'required|min:3', 'body' => 'required', 'published_at' => 'required|date' ]); Article::create($request->all()); return redirect('articles'); }</code>
以上就介紹了Laravel 5 基礎(十一)- 表單驗證,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。