Laravel controller 更乾淨的寫法

Author Avatar
Yish 10月 22, 2016
  • 在其他設備中閱讀本文章

舉例來說 article 我是採用 restful 的 route

web.php (routes.php) 當中 我是這樣寫的:

1
Route::resource('articles', 'ArticlesController');

但目前突然有個需求情境:
我需要透過 user_id 去取得他所發過的文章

原本我的作法會在 ArticlesController 新建一組 method
例如 “showByUser($user_id)” 並且加入

1
Route::get('articles/user/{user}', '[email protected]');

但這樣始終覺得很不乾淨 明明是個 restful 的 class 硬是多了這個 method

仔細的看了一下方法 發現其實在官網上就有相關的做法

新建一組 controller 我的習慣我會這樣做:

1
$ php artisan make:controller articles/showByUser

接著在 controller 內新建魔術方法 __invoke($user_id)
裡面寫下需要做的事情,這邊我還會使用 __construct 去 inject service

接下來在 web.php (routes.php) 寫下路由

1
Route::get('articles/user/{user}', 'showByUser');

看起來相當直接好懂 也不會去影響原有的 restful controller

想瞭解更多官方網站有一些範例可以參考