Laravel 11 が2024年3月にリリースになっています。
Laravelはバージョンアップの際、メソッドやオブジェクトの呼び出し方など重要な記述を大きく変更することがあります。
私は現在、PHPでべた書きしている自身のクラウドアプリをLaravel 11に換装しようとしているのですが、Validationについて従来の記述ではエラーになってしまいます。
メソッド名のタイムミスやクラスの引用、継承なども疑いましたが、どうしてもうまくゆきません。
Laravel 11は上述の通りこの3月にリリースされたばかりなので仕方なく、Laravelの英文サイトにアクセスしてvalidateの記述方法を確認しました。
1,エラー内容
一次認証としてログイン画面に企業コードとパスワードを入力して二次認証画面に飛ぶプログラムです。
一次認証のフォームをPostでコントローラのアクションメソッドlogin_wkrに飛ばし、そこでvalidate()を実行する建付けです。
<一時認証ログイン画面>
サブミット(アイコン未登録なのでここではworker_80w)押し下げ
エラーメッセージが表示される
「Call to undefined method App\Http\Controllers\TestController::validate()」
コントローラの該当行は20行目の
「$this->validate($request,$validate_rule);」
<ログイン画面のソース(login.blade.php)>
フォームのname=[Corp_id,Corp_pw]、formaction='/c000'
<ルート>
formaction='/c000' で
Route::post('c000/',[TestController::class,'login_wkr']);
に渡される
<コントローラ>
アクションメソッドとしてlogin_wkr が定義されている
「$this->validate($request,$validate_rule);」 でバリデーションの実行がなされるはず。
バリデーションに成功するとreturn view('c000') が表示されるはず。
ここで躓き前述のエラーで止まったもの。
2,Laravel 11 リファレンス参照
<コントローラの構文>
リファレンスの例ではアクションメソッド名=store
ここではRedirectResponseクラスを個別にメソッドにオーバーライド?させて to_routeメソッドを使えるようにしている模様。
この状態でview()を使うとview はViewクラスにある旨のエラーになる
<validate の記述方法>
$validated = $request->validate([ バリデートルール ]);
$thisは使わない。
3,改修適用
<ルート>
変わらず
<コントローラ>
リファレンスにあった:RedirectResponseは外してreturn はview('Test.C000') とした
C000.blade.php に無事遷移
4,まとめ
validate の記述は$this を用いず、実施したバリデーション結果のオブジェクト変数を設定してそこに収容する
$validated = $request->validate([ バリデートルール ]);
ほかにもメソッドの呼び出し方が変更になった機能があるかもしれないので都度リファレンスの参照を心がける
Comments