Laravelの名前付きルート機能がよくわからん

最近入社した会社でLaravel 5.1を使って開発しているのだけども個人的に理解が足りないなと感じたので会社にあった書籍を借りて読んでいる。 教科書はこちらのP.17のサンプルコード、読んでてよくわからんなこれ。 となったので検証してみた。

疑問1

↓を実行したときのURLはexample.com/magicなのか?それともexample.com/magical.touteに変更されるのか? リダイレクトで便利と書かれているのでexample.com/magical.routeになるのではないかという気がするが…。

Route::get("/magic", [
  "as" => "magical.route",
  function() {
    return "マジカルLaravel",
  }
]);

答え

http://localhost:8000/magicにアクセスすると…

f:id:luccafort:20170211233934p:plain

ということでasで指定した内容にURLが書き換えられることはなかった。 だとすると"as" => "magical.route"は一体なにを表しているんだろうか…? これは次の疑問点を検証したことで解消することとなった。

疑問2

↓を実行したときのURLはexample.com/magical.routeになるのか?と当初は思ったが疑問1の結果を考えるとそれはなさそう。 とはいえ念のため確認してみた。

Route::get("/magic-link", 
  function() {
    return route("magical.route");
  }
);

f:id:luccafort:20170211233947p:plain

やはりURLが勝手に書き換えられるってことはないんだなーと思っていたが 表示された内容がよくわからんことになってた。

疑問1の中身と同じものが表示されるのではないか?と考えてた…が全然関係ないURLが表示されている。 なんじゃこれ?と思ってもう一度書籍のリスト7が書かれている箇所を読む

すると「リスト6のas指定を行うことで名前を指定してURLを生成できるようになった」とある。

なるほど、つまりこれは毎回URLを書かなくても特定のURLならroute()関数を使って呼び出せばいいってことか! これはView側でめっちゃ助かるやつだ!と感心した。

タイプミスなども事前にわかるようになるだろうし非常に良い機能。 なおリスト6のコードだけを削除しexample.com/magic-linkにアクセスしたところエラー画面が表示された。

内容はRoute [magical.route] not defined.とある、非常にわかりやすくて良い。

まとめ

まだ読み始めている最中だが今まで触ったことのあるPHPフレームワークの中で一番さわり心地がいい。 かつて調査目的で少しだけ触ったことがあるがそのときはほんの少しだけ触っただけで体系的に学ばなかったことをちょっと後悔している。 (ただその時の調査目的には合致しないので結局業務で使うことはなかったと思うが。)

今までのフレームワークはどうしても最終的に不満が出てきてオレオレフレームワークを作る方向にシフトしがちだったがLaravelはそういうことになりにくい仕組みのように感じる。 まだガッツリと触れていないのでそう感じていないだけの可能性は十分にあるがRuby on Railsを初めて触ったときに感じたワクワク感があって触ってて楽しい。