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

Laravel 5.6 additional Route::resource() Parameters

我想知道如何在不使用查询字符串的情况下向 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 应用程序将是一件令人头疼的事情。

资源控制器 excel 在所有 Laravel 应用程序中提供相同的体验,如果您的应用程序需要资源控制器不立即支持的行为,那么这表明您不应该使用它们,而应该手动注册您的路线。

如果您只有一个路由需要实现自定义行为,那么您可以注册 一些 方法而不是所有方法,然后选择将自定义路由注册到您的资源控制器方法,类似于:

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

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

Resource Controllers 上的文档涵盖 exceptonly

试试这个:

Route::resource('customers', 'CustomerController')->parameters([
    'customers' => 'page'
]);
The example above generates the following URIs for the resource's show route:

/customers/{page}

你设置的名称路由:'index' 用变量替换它:'customers' 你的名称资源