コントローライントロダクション全リクエストの処理をルートファイルのクロージャで定義するよりも、コントローラクラスにより組織立てたいと、皆さんも考えるでしょう。関連のあるHTTPリクエストの処理ロジックを一つのクラスへまとめ、グループ分けができます。コントローラはapp/Http/Controllersディレクトリ下に設置します。基本のコントローラコントローラの定義これは基本的なコントローラの一例です。全てのLaravelコントローラはLaravelに含まれている基本コントローラクラスを拡張します。コントローラアクションにミドルウェアを追加するために使うmiddlewareメソッドのように、便利なメソッドをベースクラスは提供しています。}}コントローラアクションへルート付けるには、次のようにします。'UserController@show');これで指定したルートのURIにリクエストが一致すれば、UserControllerのshowメソッドが実行されます。ルートパラメーターはメソッドに渡されます。コントローラはベースクラスの拡張を要求してはいません。middleware、validate、dispatchのような便利な機能へアクセスできなくなります。コントローラと名前空間とても重要な注目ポイントはコントローラルートの定義時に、コントローラの完全な名前空間を指定する必要がないことです。RouteServiceProviderが、コントローラの名前空間を指定したルートグループの中で、ルートファイルをロードしていますので、「先頭」のApp\Http\Controllers名前空間に続くクラス名の部分だけを指定するだけで済みます。App\Http\Controllersディレクトリより深く、コントローラのPHP名前空間をネストしたり、組織立てたりする場合でも、先頭のApp\Http\Controllers名前空間からの相対クラス名を指定します。コントローラの完全なクラス名がApp\Http\Controllers\Photos\AdminControllerならば、次のようにルートを登録します。'Photos\AdminController@method');シングルアクションコントローラアクションを一つだけ含むコントローラを定義したい場合は、そのコントローラに__invokeメソッドを設置してください。}}シングルアクションコントローラへのルートを定義するとき、メソッドを指定する必要はありません。Artisanコマンドに、--invokableオプションを指定すると、__invokeメソッドを含んだコントローラを生成できます。--invokableコントローラミドルウェアミドルウェアはルートファイルの中で、コントローラのルートに対して指定します。'UserController@show')->middleware('auth');もしくは、コントローラのコンストラクタの中でミドルウェアを指定するほうが、より便利でしょう。コントローラのコンストラクタで、middlewareメソッドを使い、コントローラのアクションに対するミドルウェアを簡単に指定できます。コントローラクラスの特定のメソッドに対してのみ、ミドルウェアの適用を制限することもできます。}}コントローラではクロージャを使い、ミドルウェアを登録することもできます。これはミドルウェア全体を定義せずに、一つのコントローラのために、一つのミドルウェアを定義する便利な方法です。コントローラアクションの一部へミドルウェアを適用することはできますが、しかしながら、これはコントローラが大きくなりすぎたことを示しています。代わりに、コントローラを複数の小さなコントローラへ分割することを考えてください。リソースコントローラLaravelリソースルートは一行のコードで、典型的な「CRUD」ルートをコントローラへ割り付けます。アプリケーションへ保存されている「写真(photo)」に対する全HTTPリクエストを処理するコントローラを作成したいとしましょう。Artisanコマンドを使えば、このようなコントローラは素早く生成できます。--resourceこのArtisanコマンドはapp/Http/Controllers/PhotoController.phpとしてコントローラファイルを生成します。コントローラは使用可能な各リソース操作に対するメソッドを含んでいます。次に、コントローラへのリソースフルルートを登録します。'PhotoController');リソースに対する様々なアクションを処理する、複数のルートがこの1定義により生成されます。これらのアクションをHTTP動詞と処理するURIの情報を注記と一緒に含むスタブメソッドとして、生成されたコントローラはすでに含んでいます。一度に多くのリソースコントローラを登録するには、resourcesメソッドへ配列で渡します。photos.destroyリソースモデルの指定ルートモデル結合を使用しているが、リソースコントローラのメソッドでタイプヒントされるモデルインスタンスを指定したい場合は、コントローラの生成時に--modelオプションを使用します。--model=Photo擬似フォームメソッドHTMLフォームはPUT、PATCH、DELETEリクエストを作成できませんので、HTTP動詞を偽装するために、_method隠しフィールドを追加する必要が起きるでしょう。Bladeディレクティブでこのフィールドを生成できます。@method('PUT')</form>部分的なリソースルートリソースルートの宣言時に、デフォルトアクション全部を指定する代わりに、ルートで処理するアクションの一部を指定可能です。'destroy']);APIリソースルートAPIに使用するリソースルートを宣言する場合、createやeditのようなHTMLテンプレートを提供するルートを除外したいことがよく起こります。そのため、これらの2ルートを自動的に除外する、apiResourceメソッドが使用できます。'PhotoController');apiResourcesメソッドに配列として渡すことで、一度に複数のAPIリソースコントローラを登録できます。'PostController']);createやeditメソッドを含まないAPIリソースコントローラを素早く生成するには、make:controllerコマンドを実行する際、--apiスイッチを使用してください。全てのリソースコントローラアクションは、デフォルトのルート名が決められています。オプションにnames配列を渡せば、こうした名前をオーバーライドできます。'photos.build']);リソースルートパラメータの命名Route::resourceはデフォルトで、リソース名の「複数形」を元にし、リソースルートのルートパラメータを生成します。parametersメソッドを使用して、リソース毎にこれを簡単にオーバーライドできます。リソース名とパラメータ名の連想配列をparametersへ渡してください。'admin_user']);上記のサンプルコードは、リソースのshowルートで次のURIを生成します。/users/{admin_user}リソースURIのローカライズRoute::resourceはデフォルトで、リソースURIに英語の動詞を使います。createとeditアクションの動詞をローカライズする場合は、Route::resourceVerbsメソッドを使います。このメソッドは、AppServiceProviderのbootメソッド中で呼び出します。'PhotoController')のようなリソースルートの登録により、以下のようなURIが生成されるようになります。/fotos/crear/fotos/{foto}/editarリソースコントローラへのルート追加デフォルトのリソースルート以外のルートをリソースコントローラへ追加する場合は、Route::resourceの呼び出しより前に定義する必要があります。しないと、resourceメソッドにより定義されるルートが、追加のルートより意図に反して優先されます。コントローラの責務を限定することを思い出してください。典型的なリソースアクションから外れたメソッドが繰り返して必要になっているようであれば、コントローラを2つに分け、小さなコントローラにすることを考えましょう。依存注入とコントローラコンストラクターインジェクション全コントローラの依存を解決するために、Laravelのサービスコンテナが使用されます。これにより、コントローラが必要な依存をコンストラクターにタイプヒントで指定できるのです。依存クラスは自動的に解決され、コントローラへインスタンスが注入されます。}}Laravelの契約もタイプヒントに指定できます。コンテナが依存解決可能であれば、タイプヒントで指定できます。アプリケーションによりますが、依存をコントローラへ注入することで、より良いテスタビリティが得られるでしょう。メソッドインジェクションコンストラクターによる注入に加え、コントローラのメソッドでもタイプヒントにより依存を指定することもできます。メソッドインジェクションの典型的なユースケースは、コントローラメソッドへIlluminate\Http\Requestインスタンスを注入する場合です。}}コントローラメソッドへルートパラメーターによる入力値が渡される場合も、依存定義の後に続けてルート引数を指定します。'UserController@update');下記のようにIlluminate\Http\Requestをタイプヒントで指定しつつ、コントローラメソッドで定義しているidパラメータにアクセスできます。ルートキャッシュはクロージャベースのルートには動作しません。ルートキャッシュを使用するには、全クロージャルートをコントローラクラスを使用するように変更する必要があります。アプリケーションがコントローラベースのルート定義だけを使用しているなら、Laravelのルートキャッシュを利用できる利点があります。ルートキャッシュを使用すれば、アプリケーションの全ルートを登録するのに必要な時間を劇的に減らすことができます。ある場合には、ルート登録が100倍も早くなります。Arisanコマンドを実行するだけです。route:cacheこのコマンドを実行後、キャッシュ済みルートファイルが、リクエストのたびに読み込まれます。新しいルートを追加する場合は、新しいルートキャッシュを生成する必要があることを覚えておきましょう。プロジェクトの開発期間の最後に、一度だけroute:cacheを実行するほうが良いでしょう。キャッシュルートのファイルを削除するには、route:clearコマンドを使います。2019.ドキュメントメンテナンス期間は終了しました。注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。閉じる移動クリックで即時移動します。適用ボタンクリック後に、全項目まとめて適用されます。Scaffoldスカフォールド型枠生成スカフィールドLargeスクリーン表示幅640px80%90%100%インデントなし1rem2rem3rem本文フォントコードフォントフォント適用確認フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。バックスラッシュを含むインライン\Code\Blockの例です。以下はコードブロックの例です。}}設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。