resourceを使い始めて、まず思うのは、いつもいつも index, store, create, edit, update, destroyの一式が必要というわけではないことです。

例えば、以下のようなレポートタイプのコントローラなら、

report

indexだけで十分なので、以下のようにonlyを使い他のrouteを無効にします。


Route::resource('ranking', 'RankingController.php', ['only' => ['index']]);

また、追加と編集だけで、削除が要らないコントローラなら、exceptを使い、index, store, create, edit, updateだけの使用を可能にします。


Route::resource('no_destroy', 'NoDestroyController.php', ['except' => ['destroy']]);

便利ですね。

さらに、 index, store, create, edit, update, destroyだけでないrouteが必要なときもあります。

例えば、先の「売上ランキング」のレポートに、結果をCSVでダウンロードしたいとします。

今のところ、indexしか使用していないので、storeでも使う?

しかし、名前がいまひとつ。理想は、ranking/downloadとしたいです。

このような場合は、


Route::get('admin/ranking/download', 'RankingController@download');
Route::resource('admin/ranking', 'RankingController', ['only' => ['index']]);

と、独自のrouteをRoute::resourceの前に追加します。

php artisan route:list

の出力は、

+--------+-----------+-------------------------+------------------------+-------------------------------------------------------+
| Domain | Method    | URI                     | Name                   | Action                                                |
+--------+-----------+-------------------------+------------------------+-------------------------------------------------------+
|        | GET|HEAD  | admin/ranking           | admin.ranking.index    | App\Http\Controllers\Admin\RankingController@index    |
|        | GET|HEAD  | admin/ranking/download  |                        | App\Http\Controllers\Admin\RankingController@download |

By khino

2 thoughts on “routesを使いこなす(2)resourceを使いこなす”
  1. 参考になりました。

    Route::group([‘prefix’〜の中に、
    Route::resourceを書いて、
    さくっとパス指定を望み通りにできました。

    ありがとうございした。

    1. mashshshさん、コメントありがとうございます。Routeに関しての新投稿あります。そちらも役に立てば、と思います。

Comments are closed.