リソースフルコントローラー

Tag:

artisanコマンドを利用すると、リソース操作用のメソッドを含んだコントローラを作成してくれます。ここでは、各メソッドの役割、URLとの対応関係など取り上げます。

リソース操作用のメソッドを含んだコントローラを作成

例として、次のようにartisanコマンドを実行します。

// 5.1の場合
php artisan make:controller PostController

// 5.2の場合
php artisan make:controller PostController  --resource

すると「app/Http/Controllers/PostController.php」が生成されます。

「PostController.php」の記述を表示
<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
use App\Http\Requests;
use App\Http\Controllers\Controller;
 
class PostController 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つのメソッドが含まれていますね。

index
create
store
show
edit
update
destroy

次に、上記メソッドとURLを対応付けるために、ルーティング定義をします。

ルーティング定義

「app/Http/routes.php」に、下記定義を記述します。

\Route::resource('posts', 'PostController');

この1行を定義するだけで、先ほどのメソッドと対応付けしてくれます。

対応関係

URLとメソッドの対応関係は、以下のようになります。

HTTPメソッド パス controller
メソッド
役割
GET /posts index リソースの一覧表示
GET /posts/create create リソースを新規作成するためのフォームを表示
POST /posts store リソースを新規作成
GET /posts/{post} show 指定されたリソースの詳細情報を表示
GET /posts/{post}/edit edit 指定されたリソースの編集フォームを表示
PUT/PATCH /posts/{post} update 指定されたリソースを更新
PUT:指定された情報を更新する
PATCH:指定された情報を部分的に更新する
DELETE /posts/{post} destroy 指定されたリソースを削除

より詳しい情報は下記サイトで確認できます。
http://readouble.com/laravel/5/1/ja/controllers.html#restful-resource-controllers

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>

スポンサーリンク