artisanコマンドを利用して、リソース操作用のメソッドを含んだコントローラを作成できます。resourceメソッドを利用するとルーティング定義をまとめて行うことができます。
目次
リソース操作用のメソッドを含んだコントローラを作成
例として、次のようにartisanコマンドを実行します。
php artisan make:controller TestController --resource
すると「app/Http/Controllers/TestController.php」が生成されます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController 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)
{
//
}
}
すでに、7つのメソッドが含まれていますね。
次に、各メソッドとURLを対応付けるために、ルーティング定義をします。
ルーティング定義
routes/web.php
に、下記定義を記述します。
\Route::resource('tests', 'TestController');
この1行を定義するだけで、先ほどのメソッドと対応付けしてくれます。
URLとメソッドの対応関係
URLとメソッドの対応関係は、以下のようになります。
HTTPメソッド | パス | controllerメソッド | 役割 |
---|---|---|---|
GET | /tests | index | リソースの一覧表示 |
GET | /tests/create | create | リソースを新規作成するためのフォームを表示 |
POST | /tests | store | リソースを新規作成 |
GET | /tests/{test} | show | 指定されたリソースの詳細情報を表示 |
GET | /tests/{test}/edit | edit | 指定されたリソースの編集フォームを表示 |
PUT/PATCH | /tests/{test} | update | 指定されたリソースを更新 PUT:指定された情報を更新する PATCH:指定された情報を部分的に更新する |
DELETE | /tests/{test} | destroy | 指定されたリソースを削除 |
より詳しい情報は下記サイトで確認できます。
⇒ https://readouble.com/laravel/5.5/ja/controllers.html#resource-controllers
不要なルートを作らない方法
only
only
で必要なルートのみ指定して定義できます。
Route::resource('tests', 'TestController', ['only' => [
'index', 'show'
]]);
apiResource
apiのときは、画面用のルートが不要なので、apiResource
を利用します。
Route::apiResource('tests', 'TestController');
PUT, PATCH, DELETEメソッドの指定
HTMLのFORMでサポートしていないPUT
PATCH
DELETE
を指定するには _method隠しフィールド
を利用します。
例えば、PUTメソッドを指定するには下記のようにします。
<form action="{{ url('/posts/' . $post_id) }}" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>