Laravel 5 の基本 (11) - フォームの検証
記事を作成するときに、何も入力せずに直接送信すると、エラー プロンプトが表示されずに空の記事が表示されますが、これは間違いです。コマンドラインで php artisan
を実行すると、新しいフォームリクエストクラスを作成するためのオプション make:request
が表示されます。コマンドラインで
<code>php artisan make:request CreateArticleRequest</code>
を実行して、app/http/requests
ディレクトリにファイルを生成します。ファイルには 2 つのメソッドがあります。
<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>
の下に新しいフォルダー 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>
の判定も漢字3文字以上です。 min:3
メソッドも統合します。言い換えれば、これらのタスクをコントローラー内で直接完了することができます。 。 validate
<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>