Laravel5で新規データの作成(その2)

前回は、Createビューを作成し、バリデーションを作成するところまでをやりましたが、Laravel5からは、『フォームリクエスト』によるバリデーション機能が追加されました。今日はそのフォームリクエストバリデーションについて調べてみたいと思います。

フォームリクエストバリデーション

ファームリクエストは、バリデーションロジックを含んだカスタムロジックリクエストクラスです。フォームリクエストは、artisanコマンドで簡単に生成することができます。

それでは、コマンドプロンプトから下記のように入力します。

cd C:\xampp\htdocs\laravel
php artisan make:request GathersPostRequest

GathersPostRequest.php(フォームリクエスト)が生成されました。中身を見てみましょう。

app/Http/Request/GathersPostRequest.php

<?php namespace App\Http\Requests;
use App\Http\Requests\Request;
class GathersPostRequest extends Request {
public function authorize()
 {
 return false;
 }
public function rules()
 {
 return [
 //
 ];
 }
}

authorizeメソッドとrulesメソッドが生成されています。このrulesメソッドに、下記のようにバリデーションルールを記述します。

public function rules(){
 return [
 'name' => 'required',
 'code' => 'required',
 ];
}

それでは、このフォームリクエストバリデーションを実際に使用するには、どのようにすればいいのでしょうか。これは、実に簡単です。実際にこのバリデーションを使用したいコントローラのメソッドで、このリクエストをタイプヒントで指定すればいいのです。

前回作成した、postCreateを下記に記述してみます。

public function postCreate(Request $request){
 $val=\Validator::make($request->all(),[
 'name'=>'required',
 'code'=>'required',
 ]);
 if($val->fails()){
 return redirect()->back()->withErrors($val->errors());
 }
 }

上記のRequest(タイプヒント)を、GathersPostRequestに変更するだけです。

public function postCreate(GathersPostRequest $request){
}

これだけで、下記のようにバリデーションを勝手に実施してくれます。

2015-05-21 16-23-13

つまり、前回作成した$val=…から、return redirect()->…..迄を自動的に生成してくれます。

尚、artisanコマンドで生成されたフォームリクエストは、デフォルトで、authorizeメソッドがfalseになっていますので、このまま実行すれば、403ステータースコードのHTTPレスポンスが自動的に返されますので、『Forbidden』と表示され、コントローラメソッドは実行されません。

後で使用するとは思いますが、今はフォームリクエストの認証機能は使用しませんので、falseをtrueにしておいてください。

エラーの日本語化

エラー表示が英語なのが気になりますので、これを日本語に変更したいと思います。川瀬裕久氏から日本語変換のパッケージを提供していただいていますので、それを使用させていただきたいと思います。

composer.jsonのrequireセクションの10行目あたりに、comja5パッケージを追加します。

app/composer.json

"require": {
 "laravel/framework": "5.0.*",
 "laravelcollective/html": "~5.0",
 "laravel-ja/comja5": "~1"  //この行を追加します
 },

追加したら、コマンドプロンプトからcomposer updateを実行します。

comja5パッケージがインストールされたら、コマンドプロンプトから、下記のように実行します。

php vendor\laravel-ja\comja5\main.php -a

これで、エラー表示が日本語になりました。

2015-05-21 17-03-35

モデルの生成

それでは、いよいよ新規データを登録するために、モデルを生成します。モデルの生成もartisanコマンドを使用します。

コマンドプロンプトから下記のように実行します。

php artisan make:model Gather

尚、今後、cd C:\xampp\htdocs\laravelは、省略しますので、コマンドプロンプトからのコマンド入力は、基本的にlaravelがインストールされているフォルダ(ディレクトリ)から実行するようにしてください。

2015-05-21 17-19-53

appフォルダの直下に下記のようにGather.phpファイルが生成されました。

app/Gather.php

<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Gather extends Model {
//
}

Gather::create()メソッドでデータが一括登録できるように、複数代入のホワイトリストを記述します。上記の4行目に下記を挿入してください。

protected $fillable=['name','code','description'];

新規データの登録

それでは、フォームからデータを取得して、データベーステーブルに登録してみましょう。

まず、アクションメソッド内でGatherモデルが使用できるように、use演算子でGatherモデルを、インポートします。

app/Gather.php

use App\Gather;

そして、postCreateを下記のように修正します。

public function postCreate(GathersPostRequest $request){
 $gather=Gather::create($request->all());
 $gather->save();
}

それでは、実際にブラウザからデータを入力してみましょう。

2015-05-21 18-22-35

下記のようにデータベーステーブルに保存されました。

2015-05-21 18-24-42

本日は、ここまでにします。

本日のポイント

  1. artisanコマンドで簡単にフォームリクエストが生成できる
    • php artisan make:request フォームリクエストファイル名
  2. 生成されたフォームリクエストには、authorizeメソッドとrulesメソッドがある
  3. バリデーションは、フォームリクエストのrulesメソッド内に、バリデーションルールを記述するだけでOK!
    • public function rules(){
      return [
      ‘name’ => ‘required’,
      ‘code’ => ‘required’,
      ];
      }
  4. フォームリクエストを使用するには、コントローラのタイプヒントにフォームリクエストを指定するだけ
    • public function postCreate(GathersPostRequest $request){
      }
  5. モデルは、artisanコマンドで簡単に生成することができる
    • php artisan make:model モデル名
  6. モデルは、appフォルダの直下に生成される
  7. モデル名は、単数形で、アッパーキャメル記法で記述する
  8. 複数代入のホワイトリストは、$fillableで、ブラックリストは、$guardedで設定する
    • protected $fillable=[‘name’,’content’];
    • protected $guarded=[‘id’,account_id’];

次回は、作成したデータの一覧表を作成します。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ