クエリ文字列を使用せずにLaravelのルートリソースにパラメーターを追加する方法を知りたいです。
すべての組み込みリソースを使用してコントローラー(CustomerController)を作成し、次のルートを追加しました。
Route::resource('customers', 'CustomerController');
私がやりたいのは、カスタムルートを作成したりクエリ文字列を使用したりせずに、いくつかのデフォルトリソースにパラメータを追加することです。例えば:
オプションのパラメーター(インデックス)を持つデフォルトのリソース:
public function index($page = 0)
{
//...
}
希望のURL:
http://www.example.com/customers
http://www.example.com/customers/{page}
私は次のことを試しましたが、見つかりません例外(NotFoundHttpException)が表示されます:
Route::resource('customers', 'CustomerController')->parameters([
'index' => 'page'
]);
これは可能ですか?もしそうなら、どうすればそれを達成できますか?
リソースコントローラーは、定義済みのメソッドセットを実装する必要があります。これらのメソッドは、ルーターによって適切なHTTP動詞とパスにマップされます。これらのメソッド、パス、および動詞は、調整できないコントラクトの一部を形成します。そうしないと、リソースコントローラーを実装するLaravelアプリケーションでの作業が頭痛の種になります。
リソースコントローラーは、すべてのLaravelアプリケーションで同じエクスペリエンスを提供します。アプリケーションが、リソースコントローラーによってすぐにサポートされない動作を必要とする場合は、使用しないでください。それらを代わりに手動でルートを登録する必要があります。
カスタム動作を実装する必要のあるルートが1つしかない場合は、すべてではなくsomeメソッドを登録してから、リソースへのカスタムルートの登録を選択できますコントローラーメソッド、次のようなもの:
Route::resource('customers', 'CustomerController')->except([
'index'
]);
Route::get('/customers/{page?}', 'CustomerController@index');
Resource Controllers のドキュメントは、except
とonly
をカバーしています。