質問: 初心者の質問で申し訳ありません。 Laravelでfuelやzendのようにrestfulにルーティングさせる方法として web.phpに以下の一文 Route::controller('hoge/', 'App\Controllers\hogeController'); コントローラ側 ``` namespace App\Controllers; class hogeController extends BaseController { // getでhoge/にアクセスされた場合 public function getIndex() { 〜 } // getでhoge/harehareにアクセスされた場合 public function getHarehare() { 〜 } // getでhoge/detailにアクセスされた場合 public function getDetail() { 〜 } // postでhoge/editにアクセスされた場合 public function getEdit() { 〜 } } ``` のようなルーティングにしたいのですが、 Route::controller のルーティングはLaravel 5.2 で非推奨、Laravel5.3 で削除されたようです。 fuelやzendのように自由にコントローラーにアクションを追加したいのですが laravelではどのように同じことが実現できるのでしょうか? できれば ``` Route::get('/hoge', 'hogeController @index'); Route::get('/hoge/goodmorning', 'hogeController @harehare'); ``` のようにはしたくないのですが・・・
回答: Route::getで全部書くだけ。 そもそもなんで削除されたかというと Route::controllerを見ただけではどんなルートが定義されてるか分からない。 コントローラーまで見に行く必要がある。 Route::controllerが便利そうに見えるのは最初に作る時だけで後から見た時に困る。 先人の経験の上で削除したほうがいいと結論出されたものに初心者の感覚でこっちがいいと言っても意味がない。 それとこれだと一つのコントローラーにどんどんメソッドを増やしてファットコントローラーになりやすい。 Laravel的にベストで個人的にも勧めてるのは「リソースコントローラー以外はシングルアクションコントローラーで作る」 ``` Route::namespace('Hoge')->prefix('hoge')->group(function () { Route::get('/', 'IndexController')->name('hoge.index'); Route::get('detail', 'DetailController')->name('hoge.detail'); }); ``` web.phpを見ればルート定義が分かり、各コントローラーも大きくならない。