日本語Englishイントロダクション基本のコントローラー(コントローラの定義コントローラと名前空間シングルアクションコントローラ)コントローラーミドルウェアリソースコントローラ(部分的なリソースルートリソースルートの命名リソースルートパラメータの命名リソースコントローラーへのルート追加)依存注入とコントローラールートキャッシュイントロダクション全リクエストの処理をルートファイルのクロージャで定義するよりも、コントローラークラスにより組織立てたいと、皆さんも考えるでしょう。関連のあるHTTPリクエストの処理ロジックを一つのクラスへまとめ、グループ分けができます。コントローラーはapp/Http/Controllersディレクトリ下に設置します。基本のコントローラーコントローラの定義これは基本的なコントローラーの一例です。全てのLaravelコントローラーはLaravelに含まれている基本コントローラークラスを拡張します。コントローラアクションにミドルウェアを追加するために使うmiddlewareメソッドのように、便利なメソッドをベースクラスは提供しています。}}コントローラーアクションへルート付けるには、次のようにします。&#39;UserController@show&#39;);これで指定したルートのURIにリクエストが一致すれば、UserControllerのshowメソッドが実行されます。ルートパラメーターはメソッドに渡されます。コントローラはベースクラスの拡張を要求してはいません。middleware、validate、dispatchのような便利な機能へアクセスできなくなります。Namespacesとても重要な注目ポイントはコントローラルートの定義時に、コントローラーの完全な名前空間を指定する必要がないことです。RouteServiceProviderが、コントローラーの名前空間を指定したルートグループの中で、ルートファイルをロードしていますので、「先頭」のApp\Http\Controllers名前空間に続くクラス名の部分だけを指定するだけで済みます。App\Http\Controllersディレクトリより深く、コントローラのPHP名前空間をネストしたり、組織立てたりする場合でも、単に先頭のApp\Http\Controllers名前空間からの相対クラス名を指定するだけです。コントローラーの完全なクラス名がApp\Http\Controllers\Photos\AdminControllerならば、次のようにルートを登録します。&#39;Photos\AdminController@method&#39;);シングルアクションコントローラアクションを一つだけ含むコントローラを定義したい場合は、そのコントローラに__invokeメソッドを設置してください。}}シングルアクションコントローラへのルートを定義するとき、メソッドを指定する必要はありません。&#39;ShowProfile&#39;);コントローラーミドルウェアミドルウェアはルートファイルの中で、コントローラーのルートに対して指定します。&#39;UserController@show&#39;)-&gt;middleware(&#39;auth&#39;);もしくは、コントローラのコンストラクタの中でミドルウェアを指定するほうが、より便利でしょう。コントローラのコンストラクタで、middlewareメソッドを使い、コントローラのアクションに対するミドルウェアを簡単に指定できます。コントローラクラスの特定のメソッドに対してのみ、ミドルウェアの適用を制限することもできます。}}コントローラではクロージャを使い、ミドルウェアを登録することもできます。これはミドルウェア全体を定義せずに、一つのコントローラのために、一つのミドルウェアを定義する便利な方法です。コントローラアクションの一部へミドルウェアを適用することはできますが、しかしながら、これはコントローラが大きくなりすぎたことを示しています。代わりに、コントローラを複数の小さなコントローラへ分割することを考えてください。リソースコントローラLaravelリソースルートは一行のコードで、典型的な「CRUD」ルートをコントローラへ割り付けます。アプリケーションへ保存されている「写真(photo)」に対する全HTTPリクエストを処理するコントローラを作成したいとしましょう。Artisanコマンドを使えば、このようなコントローラは素早く生成できます。--resourceこのArtisanコマンドはapp/Http/Controllers/PhotoController.phpとしてコントローラーファイルを生成します。コントローラーは使用可能な各リソース操作に対するメソッドを含んでいます。次に、コントローラーへのリソースフルルートを登録します。&#39;PhotoController&#39;);リソースに対する様々なアクションを処理する、複数のルートがこの1定義により生成されます。これらのアクションをHTTP動詞と処理するURIの情報を注記と一緒に含むスタブメソッドとして、生成されたコントローラはすでに含んでいます。リソースコントローラーにより処理されるアクション動詞URIアクションルート名GET/photosindexphotos.indexGET/photos/createcreatephotos.createPOST/photosstorephotos.storeGET/photos/{photo}showphotos.showGET/photos/{photo}/editeditphotos.editPUT/PATCH/photos/{photo}updatephotos.updateDELETE/photos/{photo}destroyphotos.destroy擬似フォームメソッドHTMLフォームはPUT、PATCH、DELETEリクエストを作成できませんので、HTTP動詞を偽装するために、_method隠しフィールドを追加する必要が起きるでしょう。method_fieldヘルパで、このフィールドを生成できます。}}部分的なリソースルートリソースルートの宣言時に、デフォルトアクション全部を指定する代わりに、ルートで処理するアクションの一部を指定可能です。全てのリソースコントローラーアクションは、デフォルトのルート名が決められています。オプションにnames配列を渡せば、こうした名前をオーバーライドできます。&#39;photo.build&#39;]]);リソースルートパラメータの命名Route::resourceはデフォルトで、リソース名の「単数形」にもとづき、リソースルートのルートパラメータを生成します。オプション配列でparametersを指定することで簡単に、このリソース毎の基本的な命名規約をオーバーライドできます。parameters配列は、リソース名とパラメータ名の連想配列で指定します。&#39;admin_user&#39;]]);上記のサンプルコードは、リソースのshowルートで次のURIを生成します。/user/{admin_user}リソースコントローラーへのルート追加デフォルトのリソースルート以外のルートをリソースコントローラーへ追加する場合は、Route::resourceの呼び出しより前に定義する必要があります。しないと、resourceメソッドにより定義されるルートが、追加のルートより意図に反して優先されます。コントローラの責務を限定することを思い出してください。典型的なリソースアクションから外れたメソッドが繰り返して必要になっているようであれば、コントローラを2つに分け、小さなコントローラにすることを考えましょう。依存注入とコントローラーコンストラクターインジェクション全コントローラーの依存を解決するために、Laravelのサービスコンテナが使用されます。これにより、コントローラーが必要な依存をコンストラクターにタイプヒントで指定できるのです。依存クラスは自動的に解決され、コントローラーへインスタンスが注入されます。}}もちろん、Laravelの契約もタイプヒントに指定できます。コンテナが解決できるのであれば、タイプヒントで指定できます。アプリケーションによっては、依存をコントローラへ注入すれば、より良いテスタビリティが得られるでしょう。メソッドインジェクションコンストラクターによる注入に加え、コントローラーのメソッドでもタイプヒントにより依存を指定することもできます。メソッドインジェクションの典型的なユースケースは、コントローラメソッドへIlluminate\Http\Requestインスタンスを注入する場合です。}}コントローラーメソッドへルートパラメーターによる入力値が渡される場合でも、依存定義の後に続けてルート引数を指定するだけです。&#39;UserController@update&#39;);下記のようにIlluminate\Http\Requestをタイプヒントで指定しつつ、コントローラーメソッドで定義しているidパラメータにアクセスできます。ルートキャッシュはクロージャベースのルートには動作しません。ルートキャッシュを使用するには、全クロージャルートをコントローラークラスを使用するように変更する必要があります。アプリケーションがコントローラーベースのルート定義だけを使用しているなら、Laravelのルートキャッシュを利用できる利点があります。ルートキャッシュを使用すれば、アプリケーションの全ルートを登録するのに必要な時間を劇的に減らすことができます。ある場合には、ルート登録が100倍も早くなります。Arisanコマンドを実行するだけです。route:cacheこのコマンドを実行後、キャッシュ済みルートファイルが、リクエストのたびに読み込まれます。新しいルートを追加する場合は、新しいルートキャッシュを生成する必要があることを覚えておきましょう。プロジェクトの開発期間の最後に、一度だけroute:cacheを実行するほうが良いでしょう。キャッシュルートのファイルを削除するには、route:clearコマンドを使います。readme.md).これは次期リリース版の翻訳で、コミュニティにより翻訳されています。