質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1648閲覧

[laravel]resouceコントローラー使用時、route/web.php内に部分的にミドルウェアを適用する書き方

marutto

総合スコア32

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2020/01/09 12:05

編集2020/01/09 12:28

laravel作ったサイトのリファクタリングをしています。

これまではコントローラー内にミドルウェアの適用を書いていたのですが、
ルート内にミドルウェアの適用をしようとしています。

class RestUsersController extends Controller { public function __construct() { $this->middleware('auth', ['except' => 'show']); } }

上記のようにコントローラー内で定義する方法は知っている(公式リファレンス「コントローラー」)のですが、
分からないのは「route/web.php内で部分的にミドルウェアを適用する時の書き方」です。

やりたいこと
「RestUsersControllerのshow以外のアクションにだけミドルウェアを適用したい」

Route::resource('users', 'RestUsersController', ['only' => ['index', 'show', 'edit', 'update', 'destroy']])->middleware('auth')->except('show');

上記のようにexcept()、またはonlyを使うと、「このアクションだけを使用する(しない)」という意味でのexcept()/only()になってしまいます。

アクション内に書く方法は分かっている上での話ということもあり
必須ではないのですが・・・今後の勉強のためにアドバイスいただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/01/09 12:16

なぜ「初歩的なこと」と思われたのでしょうか。 ドキュメント読んだだけで解決しない、ヒントにもならないようなことであれば とても「初歩的」と言えないのでは。 やろうとしていること、というかリファクタリング自体、初歩的なフェーズではありませんよ。
marutto

2020/01/09 12:37

ご指摘ありがとうございます。 仰る通り、初歩的ではないかもしれません。 「チェーンメソッドで繋げたり、[]で囲うことで複数・個別に適用できたりと laravelは書きやすく、ご存知の方が多いことなのではないか」 という私が抱いていたイメージから初歩的と表現していました。 不適切かと思い修正いたしました。 改めてご存知のことがあれば対応してくださいますと幸いです。
guest

回答1

0

ベストアンサー

ルートで書くときは単純に2つに分けます。

php

1Route::resource('users', 'RestUsersController', ['only' => ['show']); 2Route::resource('users', 'RestUsersController', ['only' => ['index', 'edit', 'update', 'destroy']])->middleware('auth');

console

1% php artisan route:list 2+--------+-----------+-------------------+---------------+--------------------------------------------------+------------+ 3| Domain | Method | URI | Name | Action | Middleware | 4+--------+-----------+-------------------+---------------+--------------------------------------------------+------------+ 5| | GET|HEAD | users | users.index | App\Http\Controllers\RestUsersController@index | web,auth | 6| | GET|HEAD | users/{user} | users.show | App\Http\Controllers\RestUsersController@show | web | 7| | PUT|PATCH | users/{user} | users.update | App\Http\Controllers\RestUsersController@update | web,auth | 8| | DELETE | users/{user} | users.destroy | App\Http\Controllers\RestUsersController@destroy | web,auth | 9| | GET|HEAD | users/{user}/edit | users.edit | App\Http\Controllers\RestUsersController@edit | web,auth | 10+--------+-----------+-------------------+---------------+--------------------------------------------------+------------+

投稿2020/01/09 21:34

crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marutto

2020/01/10 01:31

お陰様でルーティング時にミドルウェアを個別適用することができました! 教えていただいた後だと「resourceにアクションを追加する時のルーティング処理と似ているな。」とか思うのですが、、、精進いたします。 何はともあれ、助かりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問