Laravelのバリデーションのルール
Laravelでバリデーションのルールは様々な書き方があると思うが、もしModelに書くとこのようになるだろう。
namespaceApp;useIlluminate\Database\Eloquent\Model;classTestextendsModel{publicstatic$rules=array('title'=>'required','body'=>'required',);}
そして、Modelに書いたルールをControllerではこのように利用できる。
namespaceApp\Http\Controllers;useIlluminate\Http\Request;useApp\Http\Controllers\Controller;useApp\Test;classTestControllerextendsController{publicfunctioncreate(Request$request){$this->validate($request,Test::$rules);$test=newTest;$input=$request->all();$test->fill($input);$test->save();}
ほとんどの場合、バリデーションのルールは public static 変数名...
と書き出すことが多い。
public static
とはなにか?
PHPの公式サイトにはこのように記されている。https://www.php.net/manual/ja/language.oop5.static.php
クラスプロパティもしくはメソッドを static として宣言することで、 クラスのインスタンス化の必要なしにアクセスすることができます。 static なプロパティは、インスタンス化されたクラスオブジェクトから アクセスすることはできません (static なメソッドにはアクセスできます)。
「クラスのインスタンス化」というのは、上のコードのControllerでは $news = new Test;
にあたる。
これがクラスのインスタンス化である。
クラスはインスタンス化、つまり変数を初期化して利用することが多い。
そうすることでクラスに定義されたメソッドなどをそのまま流用できるからである。
しかし public static
という宣言をしたものは、クラスのインスタンス化は意味がない。クラス::プロパティ
と書くことでクラスの中のプロパティを参照することができる。
$this->validate($request, Test::$rules);
と書くことで、Test
というクラスの中の $rules
を参照していることになる。
public static
の使いどころ
public static
について説明をしたがこれは何のためにあるのか?という疑問が出てくる人がいると思う。
ほとんどのプログラムはクラスをインスタンス化して、そのクラスのプロパティが変化していくことが多い。
上のコードではリクエストを受け取ってデータベースに保存するが、リクエストは毎回内容が違う。
しかし、バリデーションのルールはリクエストに応じて変わらない。
リクエストに応じて変わらないとは、インスタンス化の有無に関わらずプロパティが変化しないことになる。
このときに public static
を利用すると良い。