Laravel 5.6附加Route :: resource()参数

Ric*_*cky 7 laravel laravel-routing laravel-5

我想知道如何在不使用查询字符串的情况下向Laravel的Route Resource添加其他参数.

我创建了一个包含所有内置资源的控制器(CustomerController),然后添加了以下路由:

Route::resource('customers', 'CustomerController');
Run Code Online (Sandbox Code Playgroud)

我想要做的是在不创建自定义路由或使用查询字符串的情况下为一些默认资源添加其他参数.例如:

带可选参数(索引)的默认资源:

public function index($page = 0)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

所需网址:

http://www.example.com/customers
http://www.example.com/customers/{page}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下,但我得到一个未找到的异常(NotFoundHttpException):

Route::resource('customers', 'CustomerController')->parameters([
    'index' => 'page'
]);
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是这样,我该怎样才能完成它?

sam*_*sam 11

资源控制器必须实现一组定义的方法,然后由路由器映射到适当的HTTP谓词和路径.这些方法,路径和动词构成了无法调整的合同的一部分,否则使用实现资源控制器的Laravel应用程序将会很头疼.

资源控制器擅长在所有Laravel应用程序中提供相同的体验,如果您的应用程序需要资源控制器不支持的行为,则表明您不应该使用它们,而应该手动注册您的路由.

如果您只有一个需要实现自定义行为的路由,那么您可以注册一些方法而不是所有方法,然后选择向Resource Controllers方法注册自定义路由,例如:

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

Route::get('/customers/{page?}', 'CustomerController@index');
Run Code Online (Sandbox Code Playgroud)

有关资源控制器的文档涵盖exceptonly.