1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LaravelでRoute::resourceを使用する時

Last updated at Posted at 2020-07-24

##概要
Route::resourceを使用した時に必要のないrouteを無効にする方法。

##環境
Laravel: 7.21.0

##resourceコントローラの生成

下記のコマンドでルートとコントローラを自動的に割り付けてくれます。

php artisan make:controller PostController --resource

artisanコマンドで生成されたコントローラは以下のような内容です。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

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)
    {
        //
    }
}

##ルーティングの指定
Route::resourceを使うと必要なルートを記述を一度だけで指定できます。

web.php
Route::resource('post', 'PostController');

ルーティングは下記のような内容になります。

+--------+-----------+------------------+--------------+---------------------------------------------+------------+
| Domain | Method    | URI              | Name         | Action                                      | Middleware |
+--------+-----------+------------------+--------------+---------------------------------------------+------------+
|        | GET|HEAD  | post             | post.index   | App\Http\Controllers\PostController@index   | web        |
|        | POST      | post             | post.store   | App\Http\Controllers\PostController@store   | web        |
|        | GET|HEAD  | post/create      | post.create  | App\Http\Controllers\PostController@create  | web        |
|        | GET|HEAD  | post/{post}      | post.show    | App\Http\Controllers\PostController@show    | web        |
|        | PUT|PATCH | post/{post}      | post.update  | App\Http\Controllers\PostController@update  | web        |
|        | DELETE    | post/{post}      | post.destroy | App\Http\Controllers\PostController@destroy | web        |
|        | GET|HEAD  | post/{post}/edit | post.edit    | App\Http\Controllers\PostController@edit    | web        |
+--------+-----------+------------------+--------------+---------------------------------------------+------------+

##ルーティングの制限
全部のrouteを使用しない場合only,exceptを使って使用するrouteを指定できます。
今回は、index,showのみを使用できるようにしてみます。

web.php
// onlyを使った場合
Route::resource('post', 'PostController')->only([
    'index', 'show'
]);

// exceptを使った場合
Route::resource('post', 'PostController')->except([
  'create', 'store', 'edit', 'update', 'destroy'
]);

onlyを使用すると指定した他のroute以外を無効にできます。
expectを使用すると指定したrouteを無効にできます。

結果はどちらも下記のようになります。

+--------+----------+-------------+------------+-------------------------------------------+------------+
| Domain | Method   | URI         | Name       | Action                                    | Middleware |
+--------+----------+-------------+------------+-------------------------------------------+------------+
|        | GET|HEAD | post        | post.index | App\Http\Controllers\PostController@index | web        |
|        | GET|HEAD | post/{post} | post.show  | App\Http\Controllers\PostController@show  | web        |
+--------+----------+-------------+------------+-------------------------------------------+------------+

個人的にonlyを使用した場合の方が分かり易いと思いました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?