Laravel 名前付きルートのちょっとした発見
はじめに
それなりに古いバージョンからLaravelを使っていると
ルートに名前を付ける時は、配列にas
というキーで指定していたりしました。
// asを使った書き方
Route::get('user/profile', ['as' => 'profile', function () {
//
}]);
気が付けば、name
メソッドを使うように変わっていました。
// nameメソッドを使った書き方
Route::get('/user/profile', function () {
// ...
})->name('profile');
一体どこでname
メソッドが増えたのか、なぜas
が消えていったのか、ちょっと調べてみました。
まずはドキュメントから見ていく
古いやつだと4.2からあるので順番に見ていきます。
4.2のドキュメント
as
を使った書き方が載っています。
さすがにまだname
メソッドはなさそうです。
5.0のドキュメント
4.2と変化がない感じです。
配列の書き方がarray()
から[]
になったのでサポートしているPHPバージョンに変化があった感じなんでしょうね。
5.1のドキュメント
お、ここでname
メソッドが登場しましたね
Route::get('user/profile', 'UserController@showProfile')->name('profile');
ただ、as
の書き方も載っている状態ですね。
5.2のドキュメント
文章に変化はありますが、5.1とサンプルコードに変化はなしですね。
5.3のドキュメント
お、ここでas
を使った書き方が消えて、name
メソッドに変わりましたね。
laravel/docs
を見てみる
つぎにドキュメントを見る限り、5.3で何かがあってas
が消えたと思うのでlaravel/docsを見てみたところ、
とくにプルリクエストがあるわけでも、cleaning up routing docs
とコメントが書かれたコミットだけなのでドキュメントから消えた理由はわからずでした。
一応、5.1でname
メソッドの書き方が登場した時はプルリクエストはありましたね。
laravel/framework
を見るしかない
ならname
メソッドが追加された経緯をみつければ、なぜas
が消えたのかわかるかもしれないってことでlaravel/frameworkを見ていくことにした。
5.0で一度追加しようとしたプルリクエストを見つけました。
コメントを見る限り、賛成意見が多いし、プルリクエストの作成者も連想配列より、メソッドの方が優れているとアピールしていますね。
しかし、この時は配列でもいいじゃないかってことでTaylor氏がクローズしていますね。
つぎに5.2で再び入れようとしています。
こちらはTaylor氏から5.1でよろしく的な感じのコメントを残してクローズしています。
なので、最終的に5.1で追加されたって流れですかね。
as
は使えなくなったのか
では試しに、手元にあったLaravel10.9.0のバージョンを使ってas
で名前を付けたルートを用意して動かしてみました。
Route::get('/welcome', ['as' => 'welcome', function () {
return view('welcome');
}]);
route
へルパ関数を使ってurlが取れたのでLaravel10.9.0でも使えることは確認できました。
$ php artisan -V
Laravel Framework 10.9.0
$ php artisan tinker
Psy Shell v0.11.16 (PHP 8.2.3 — cli) by Justin Hileman
> route('welcome');
= "http://localhost/welcome"
実際name
メソッドの処理を見てみると、裏ではas
はまだまだ現役で活躍している感じがしますね。
まとめ
name
メソッドが追加された経緯は判明しましたが、as
がドキュメントから消えた理由は判明しなかったです。
一応、ドキュメントに書いていないだけでas
を使ってルートに名前を付けることは可能なのはわかりましたが、ドキュメントから消えているので、いつかは使えなくなる可能性はあると思います。
なので、name
メソッドを使った方がいいんでしょうね。
Discussion
新しい方式が誕生すると、Laravel チーム的にはそちらが推奨になりますので、古いやり方はドキュメントからは消えてしまう、とそんな感じかなと思います😊
そのような流れがあるんですね
だから、ドキュメントにはメソッドを使うほうが書かれているわけですか