web-dev-qa-db-ja.com

Laravel 5.6追加のRoute :: resource()パラメーター

クエリ文字列を使用せずに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'
]);

これは可能ですか?もしそうなら、どうすればそれを達成できますか?

7
Ricky

リソースコントローラーは、定義済みのメソッドセットを実装する必要があります。これらのメソッドは、ルーターによって適切なHTTP動詞とパスにマップされます。これらのメソッド、パス、および動詞は、調整できないコントラクトの一部を形成します。そうしないと、リソースコントローラーを実装するLaravelアプリケーションでの作業が頭痛の種になります。

リソースコントローラーは、すべてのLaravelアプリケーションで同じエクスペリエンスを提供します。アプリケーションが、リソースコントローラーによってすぐにサポートされない動作を必要とする場合は、使用しないでください。それらを代わりに手動でルートを登録する必要があります。

カスタム動作を実装する必要のあるルートが1つしかない場合は、すべてではなくsomeメソッドを登録してから、リソースへのカスタムルートの登録を選択できますコントローラーメソッド、次のようなもの:

Route::resource('customers', 'CustomerController')->except([
    'index'
]);

Route::get('/customers/{page?}', 'CustomerController@index');

Resource Controllers のドキュメントは、exceptonlyをカバーしています。

11
sam