例として、このコントローラーを取り上げます。
<?php
class TestController extends BaseController {
public function getIndex()
{
echo "a";
}
public function postSecond($a)
{
echo "b";
}
}
あなたのルートで、あなたが持っている場合
Route::controller('tests', 'TestController');
そして実行
php artisan routes
あなたが持っているでしょう:
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| | GET /tests/index/{v1}/{v2}/{v3}/{v4}/{v5} | | TestController@getIndex | | |
| | GET /tests | | TestController@getIndex | | |
| | POST /tests | tests.store | TestController@store | | |
| | GET /tests/{_missing} | | TestController@missingMethod | | |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
Laravel はコントローラを検査し、見つかったメソッドに基づいてルートを自動的に生成します。
しかし、もしそうなら
Route::resource('tests', 'TestController');
次のルート リストが表示されます。
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| | GET /tests | | Closure | | |
| | GET /tests | tests.index | TestController@index | | |
| | GET /tests/create | tests.create | TestController@create | | |
| | POST /tests | tests.store | TestController@store | | |
| | GET /tests/{tests} | tests.show | TestController@show | | |
| | GET /tests/{tests}/edit | tests.edit | TestController@edit | | |
| | PUT /tests/{tests} | tests.update | TestController@update | | |
| | PATCH /tests/{tests} | | TestController@update | | |
| | DELETE /tests/{tests} | tests.destroy | TestController@destroy | | |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
推測ではありませんが、Laravel は事前定義されたルートの CRUD リストを使用します。これらのルートの一部を削除することはできますが、コントローラーを検査してメソッドのルートを構築することはありません。
あなたにとって何が最善かを決めるのはあなたです。しかし、通常、コントローラーが CRUD の場合、Route::resource() は適切な出発点です。それ以外の場合は、Route::controller() を使用するか、ルートを手動で構築できます。
編集:
1つまたは別の理由は、単に設計と選択の問題です。それらのどれも使用しない人もいます。Route::resource()
Rails のルーティング方法に従っているだけです: http://guides.rubyonrails.org/routing.html。
これらすべてのメソッドを作成するRoute::resource()
必要はありませんが、Laravel は常にデフォルトですべてのメソッドを作成するため、無意味なルートのリストが作成されます。
Route::resource('photo', 'PhotoController',
array('only' => array('index', 'show')));
また、ルートのリストには index および show アクションのみが表示されます。
また、他のルートが必要な場合は、Route::resource()
それらを手動で構築するか、いくつかの魔法を使ってすべてのリソースフルなルートを自動化する必要があります。Route::controller()
新しいメソッドを追加するたびに、すべてが自動的に使用され、新しいルートが作成されます。
繰り返しになりますが、作成する CRUD コントローラーがある場合は、まずRoute::resource()
. それ以外の場合は、特定のケースでのいずれかの利点について考えてください。
EDIT2:
これは、Phil Sturgeon (PyroCMS および PHP-FIG) による、すべてのルートを手動で構築する利点に関する素晴らしい記事です: http://philsturgeon.co.uk/blog/2013/07/beware-the-route-to -悪。