サーチ…
前書き
リクエスト処理ロジックのすべてをルートファイルの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 |