サーチ…


前書き

リクエスト処理ロジックのすべてをルートファイルのClosuresとして定義するのではなく、Controllerクラスを使用してこの振る舞いを整理することができます。コントローラは、関連するリクエスト処理ロジックを1つのクラスにまとめることができます。コントローラはデフォルトでapp/Http/Controllersディレクトリに保存されます。

基本的なコントローラ

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

このコントローラアクションへのルートを以下のように定義することができます:

Route::get('user/{id}', 'UserController@show');

リクエストが指定されたルートURIと一致すると、 UserControllerクラスのshowメソッドが実行されます。もちろん、ルートパラメータもメソッドに渡されます。

コントローラミドルウェア

ミドルウェアは、ルートファイル内のコントローラのルートに割り当てることができます。

Route::get('profile', 'UserController@show')->middleware('auth');

ただし、コントローラのコンストラクタ内でミドルウェアを指定するほうが便利です。コントローラのコンストラクタのミドルウェアメソッドを使用すると、ミドルウェアをコントローラのアクションに簡単に割り当てることができます。

class UserController extends Controller
{
    /**
     * Instantiate a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');

        $this->middleware('log')->only('index');

        $this->middleware('subscribed')->except('store');
    }
}

リソース・コントローラ

Laravelのリソースルーティングは、典型的な "CRUD"ルートを1行のコードでコントローラに割り当てます。たとえば、アプリケーションによって保存された "写真"のすべてのHTTP要求を処理するコントローラを作成することができます。 make:controller Artisanコマンドを使用して、このようなコントローラを素早く作成することができます:

php artisan make:controller PhotoController --resource

このコマンドは、 app/Http/Controllers/PhotoController.phpます。コントローラには、利用可能な各リソース操作のためのメソッドが含まれます。

リソース・コントローラーの外観の例

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PhotoController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

リソースコントローラの例は、以下の表のメソッド名を共有しています。

次に、コントローラへの手軽なルートを登録することができます。

Route::resource('photos', 'PhotoController');

この単一ルート宣言は、リソース上のさまざまなアクションを処理する複数のルートを作成します。生成されたコントローラーには、HTTP動詞と処理するURIを通知する注釈を含む、これらのアクションごとにスタブされたメソッドが既に用意されています。

リソース・コントローラーによって処理されるアクション

動詞 URI アクションルート名
取得する /photos 索引 photos.index
取得する /photos/create 作成する photos.create
役職 /photos 格納 photos.store
取得する /photos/{photo} ショー photos.show
取得する /photos/{photo}/edit 編集 photos.edit
PUT / PATCH /photos/{photo} 更新 photos.update
削除 /photos/{photo} 破壊する photos.destroy


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow