我想知道如何在不使用查询字符串的情况下向Laravel的Route Resource添加其他参数。
我创建了一个包含所有内置资源的控制器(CustomerController),然后添加了以下路由:
Route::resource('customers', 'CustomerController');
我想要做的是在不创建自定义路由或使用查询字符串的情况下为某些默认资源添加其他参数。例如:
带有可选参数(索引)的默认资源:
public function index($page = 0)
{
//...
}
所需网址:
http://www.example.com/customers
http://www.example.com/customers/{page}
我尝试了以下内容,但是我得到了一个未找到的异常(NotFoundHttpException):
Route::resource('customers', 'CustomerController')->parameters([
'index' => 'page'
]);
这可能吗?如果是这样,我该怎样才能完成它?
答案 0 :(得分:7)
资源控制器必须实现一组已定义的方法,然后由路由器映射到相应的HTTP谓词和路径。这些方法,路径和动词构成了无法调整的合同的一部分,否则使用实现资源控制器的Laravel应用程序将会很头疼。
资源控制器擅长在所有Laravel应用程序中提供相同的体验,如果您的应用程序需要资源控制器不支持的行为,则表明您不应该使用它们,而应该注册您的手动路线。
如果您只有一条需要实现自定义行为的路由,那么您可以注册一些方法而不是所有方法,然后选择向资源控制器方法注册自定义路由,例如:
Route::resource('customers', 'CustomerController')->except([
'index'
]);
Route::get('/customers/{page?}', 'CustomerController@index');
Resource Controllers上的文档涵盖except
和only
。
答案 1 :(得分:0)
尝试一下:
Route::resource('customers', 'CustomerController')->parameters([
'customers' => 'page'
]);
The example above generates the following URIs for the resource's show route:
/customers/{page}
您设置名称路线:'索引'用变量:'customers'资源名称
替换