在建立一個(gè)文章的時(shí)候,如果你什么都不輸入直接提交,ok,你獲得了一個(gè)空的文章,沒(méi)有任何錯(cuò)誤提示,這是不對(duì)的。在命令行下運(yùn)行 php artisan 可以看到一個(gè)選項(xiàng) make:request,新建一個(gè)form request類(lèi)。在命令行執(zhí)行
php artisan make:request CreateArticleRequest生成的文件在 app/http/requests 目錄下。在文件中我們可以看到兩個(gè)方法:
public function authorize(){return false;}public function rules(){return [//];}authorize 表示用戶(hù)在提交表單的時(shí)候是否需要是認(rèn)證用戶(hù),我們不需要認(rèn)證,返回 true。rules是我們的規(guī)則方法。讓我們修改這個(gè)方法:
public function authorize(){//修改為 true,表示不需要認(rèn)證,或者是通過(guò)認(rèn)證return true;}public function rules(){return ['title' => 'required|min:3', 'body' => 'required', 'published_at' => 'required|date'];}其他的約束可以插看 laravel 的文檔。上面的約束表示 title 是必須輸入的,最少3個(gè)字符,body 是必須的,published_at 是必須的而且是日期。
在視圖中,我們總是可以訪(fǎng)問(wèn) $errors 變量來(lái)判斷我們是否有錯(cuò)誤,修改視圖
@if ($errors->any()) <ul class="alert alert-danger"> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> @endif {{--使用我們添加的 illuminate/html 開(kāi)源庫(kù)--}} {!! Form::open(['url' => 'articles']) !!}修改控制器,引入我們的 Request 類(lèi)。
public function store(Requests/CreateArticleRequest $request) { Article::create($request->all()); return redirect('articles'); }再次提交表單,什么都不填,可以看到錯(cuò)誤信息。
修改提示信息變?yōu)橹形?p>顯示的是英文的錯(cuò)誤信息,實(shí)際上laravel考慮到了國(guó)際化的問(wèn)題,首先修改config/app.php ,'locale' => 'zh',將 locale 語(yǔ)言設(shè)置為中文,然后再 resources/lang 下面新建文件夾 zh, 拷貝 resources/lang/en/validation.php 文件到 zh 目錄下,修改:
"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 必須填寫(xiě)。",其他的可以自行翻譯。再次提交空表單,錯(cuò)誤信息為中文了。而且 min:3 的判斷也為最少3個(gè)中文。
--
laravel 也在控制器中集成了 validate 方法,換句話(huà)說(shuō),我們不一定要生成 request 類(lèi),這些工作我們可以直接在控制器中完成。
修改控制器:
//注意 Request 的命名空間,不要弄錯(cuò)了 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'); }結(jié)果相同,這樣可以更快速的完成簡(jiǎn)單的驗(yàn)證。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注