Laravelのバリデーションのルール
Laravelでバリデーションのルールは様々な書き方があると思うが、もしModelに書くとこのようになるだろう。
namespace App;
use Illuminate\Database\Eloquent\Model;
class Test extends Model
{
public static $rules = array(
'title' => 'required',
'body' => 'required',
);
}
そして、Modelに書いたルールをControllerではこのように利用できる。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Test;
class TestController extends Controller
{
public function create(Request $request)
{
$this->validate($request, Test::$rules);
$test = new Test;
$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
を利用すると良い。
まとめ
-
public static
ではnew
が必要ない。 -
public static
でがnew
よって生まれたインスタンスの状態が変化しないときに利用すると良い。