【Laravel入門③】PHPフレームワーク Laravelの使い方(ルーティング Route::resourceの設定)

甘党エンジニアのkanjiです。

今回は「ルーティング Route::resourceの設定」について書いていく。

ユーザーがブラウザでURLにアクセスした際、そのURLを見て適切なコントローラにつなく役割を果たす「ルーティング」。

そしてLaravelでルーティングを実装するのに便利なのが、Route::resourceである。

あくまでコードを完結に、便利にできるものなので絶対必要というわけではないが、使いこなせると心強い。

なお、Railsを触ったことがある方であれば、流れはほとんど同じなので、イメージしやすい。

開発環境
PHP 7.3.9
Laravel6.0

前回の記事(LaravelDB・MVC構築編)
【Laravel入門②】PHPフレームワーク Laravelの使い方(DB・MVC構築編)

ルーティングRoute::resourceの指定

ルーティングに下記コードを記述する。

Route::resource('shops', 'ShopController');

それにより、この一行だけでRESTに沿ったルーティングが自動生成される。

作成されるルーティングは以下。

Verb URI Action Route Name
GET /shops index shops.index
GET /shops/create create shops.create
POST /shops store shops.store
GET /shops/{id} show shops.show
GET /shops/{id}/edit edit shops.edit
PUT/PATCH /shops/{id} update shops.update
DELETE /shops/{id} destroy shops.destroy

対応するコントローラとメソッドを自動生成してくれるartisanコマンド

$ php artisan make:controller ShopController --resource

下記コマンドが自動生成

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ShopController extends Controller
{
    public function index()
    {
        //
    }

    public function create()
    {
        //
    }

    public function store(Request $request)
    {
        //
    }

    public function show($id)
    {
        //
    }

    public function edit($id)
    {
        //
    }

    public function update(Request $request, $id)
    {
        //
    }

    public function destroy($id)
    {
        //
    }
}

ルーティングRoute::resourceでルーティングを制限する方法

例えば、show・destroyを使わない場合など、7つのアクション全てを使用しない場合には2通りの書き方がある。

// show、destroyのルーティングを削除

// onlyを使う方法
Route::resource('shops', 'ShopController', ['only' => ['index', 'create', 'edit', 'store', 'update']]);

// exceptを使う方法
Route::resource('shops', 'ShopController', ['except' => ['show', 'destory']]);

参考にさせて頂いたサイト
参考 LaravelでRoute::resourceを使うときに気をつけることQiita