ルーティングとビューのちょっとだけ入口ルーティングを定義する前にビューを作っておきたいのは、もしかしたら順番としては逆なのかもしれませんが、「ルーティングしてもビューがなかったらエラーになるじゃないか」という、わりとどうでもいいこだわりから、ビューを作ってみます。(View)表示に関する処理をするところです。WebアプリケーションではHTMLを出力するところ、と言い換えれば分かりやすいかもしれません。Laravelのようなたくさんのディレクトリ階層を持つフレームワークでは、配置場所を探すのもイヤになりそうですが、リファレンスにはresources/viewsに配置と記載があります。Menu</h1></body></html>LaravelではBladeというテンプレートエンジンを使っています。Bladeテンプレートエンジンについては、Laravelリファレンスにも記述がありますが、読んだだけではチンプンカンプンです。ルーティングを確認してみたいだけなので、ただのHTMLで書かれたテンプレートを置きました。ファイル名はmain.blade.phpと付与しました。mainはビューを指定するときの名称。bladeはLaravel標準テンプレートのbladeを使っていることを表しています。拡張子はphpでお願いします。結果、main.blade.php。しておけば、コントローラーでview('main');と指定すればこのビューが読み込まれます。そのビューを表示させるだけのルーティングをroutes\web.phpに追加。view('main');});クロージャーがそのまんまコントローラーとなっております。/mainにブラウザでアクセスすると、ビューが表示されます。Javaのようにコンテナの再起動もなにもしなくていいので、何かちょっと不思議な感じがします。ビューの階層化アプリケーションが複雑になると、ビューの配置にもディレクトリ階層を持たせたくなるのですが、その場合どうするのでしょうか。resources/viewsの中を覗いてみると、以前作った認証のビューらしきものが、階層を持たせて配置されています。resources\views\auth\login.blade.phpという風に。AuthenticatesUsers)のでは、以下のように記述されています。view('auth.login');}ドットで区切って階層を指定するようです。ルーティング要するに、特定のURLにアクセスがあったときに何をさせるかを決めることです。5.4のリファレンスによれば、様々なルーティング方法があるようですが、ざっと眺めたところ以下の事項を理解していれば大抵のことは実現できそうです。{//});getやpostはそれぞれのHTTPメソッドに対応しています。それぞれのメソッドの意味はwikipediaか何かで確認するといいと思いますが、通常はgetとpostで事足りそうに思う。matchとanyはHTTPメソッドではなく、複数のメソッドに対応したルートを設定するときに使うものです。CSRF保護webルートファイル中で定義され、POST、PUT、DELETEルートへ送信されるHTMLフォームはすべて、CSRFトークンフィールドを含んでいる必要があります。この程度のセキュリティ機能が強制されているのはとてもいいと思います。APIとしてPOSTで更新させたい場合などは何等かの回避策が必要そうですね。任意パラメータパラメータ付きルートを設定する。ルーティングについては、それ以外のリファレンスは必要に応じて読めばいいと思います。ルートグループなんかは規模が少し大きくなったらすぐさま使いたくなりそうですけどね。先のルーティングの定義に戻りましょう。view('main');});と記述すると、ここにはルーティングとビューの指定しかないようにも見えますが、先にも書いたようにこのビューの指定をしている箇所がコントローラーです。コントローラーをクロージャーとして書いているのでなんとなく実感がないというか、分かりにくいですね。コントローラーとして、クラスのメソッドを指定しているのが、これも既出の以下のような記述です。protected]');このルーティングでは、getの第2引数でコントローラーとして実行するクラスとメソッドを指定しています。おおざっぱには「表示やデータを直接操作しない、入力によってどのようなデータ操作をするか判断するところ」です。書くとこれまた議論が巻き起こるので、ViewでもModelでもないところ、としておきます。私はMVC原理主義者ではないですが(経験上、結局複雑になってしまうMVCがいくつもありました。その中にはMVCの誤用も含まれていますが)、みんなの共通認識として処理を記述する場所が分かれているのはいいかな、程度に考えることにしています。デフォルトの認証機能をインストールすると、すでにweb.phpへ/homeというルーティングが定義されています。protected]');以下がそのHomeControllerクラス。view('home');}}と、同時に認証の対象であるURLなためか、コンストラクタでmiddlewareが指定されています。__construct(){$this->middleware('auth');}ここで呼び出しているmiddlewareメソッドはどこにあるのか、ずいぶん探したところ、基底クラスであるabstractなControllerクラスに定義されています。このControllerクラスにはその他にもcallActionというメソッドも定義されていますが、いつコールされるものか分からない。controller.と記述されているので、関数呼び出しのインターフェイスを抽象化しているのでしょう。思って探したら、Illuminate\Routing\ControllerDispatcherから呼び出されています。$controller->{$method}(...array_values($parameters));}処理を切り替えるのか、別の処理を実行したいときに呼ばれる様子。dispatchメソッドはさらにIlluminate\Routing\Routeというおなじみのところから以下のように呼び出されています。$this->getControllerMethod());}$this->getControllerMethod()でメソッドを取り出しているところを見ると、事前にどこかで設定されいてる模様。Route::getの第二引数が$actionなので、ここで指定するのでしょう。いうことは、Route::getの第2引数で指定するクラスはControllerクラスを継承している必要があるのですね。いう当たり前の結論に到達しました。実際にこのコントローラーのサブクラスを作ってみたいけれど、どこに作るのが正しいのか。どこに作れば自動的に読み込まれるのか。HomeController.phpクラスはapp\Http\Controllersに作られています。そこが自由にコントローラーを入れていいい場所のようです。https://readouble.com/laravel/5.4/ja/controllers.htmlこのページにここまでで調べたことが全部書いてあって微妙な気持ちです。コントローラーはコントローラークラスを継承する必要があるって、まぁ、調べなくても分かりますよね。調べなくてもいいことを深く調べて、ビューにはほとんど手を付けられませんでした。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。新しい投稿をメールで受け取る。