我目前有这样的路线
Play Games callback indicates connection failure.
UI interaction required to connect to Google Play.
这将产生像这样的路线列表
//Settings
Route::prefix('settings')->group(function(){
//Get all users settings
Route::resource('user', 'SettingsController');
});
以此类推。
我的问题是我希望设置控制器能够控制1个控制器中的不同设置列表,而不仅仅是“用户”。
如何命名资源,以便最后命名功能?
例如,上面的代码生成了类似| POST | settings/user |user.store | App\Http\Controllers\SettingsController@store | web,auth,GlobalAdmin |
| GET|HEAD | settings/user |user.index | App\Http\Controllers\SettingsController@index | web,auth,GlobalAdmin |
| GET|HEAD | settings/user/create |user.create | App\Http\Controllers\SettingsController@create | web,auth,GlobalAdmin |
的函数名,我将如何获取它,以便它自动构建带有类似SettingsController@store
的前缀的函数名?
答案 0 :(得分:1)
不能。除非您在幕后,并且真正了解Laravel如何处理这一代人。但是,您可以做的是在资源路由上使用except
或使用partial resource routes。
完成上述操作之一后,您可以手动添加路线,例如
POST设置/用户 开机自检设置/其他 POST设置/常规
并以这种方式指出他们。
答案 1 :(得分:1)
如果您确实想拥有这种行为,可以拥有它。您可以扩展ListField
类并将扩展版本绑定到容器。
只有一种方法需要调整,即为资源Illuminate\Routing\ResourceRegistrar
的每条路由设置action
的方法。可以对此进行调整,以检查在getResourceAction
已经使用的选项数组中传递的键。如果存在密钥,则可以启用所需的行为,在方法名称前添加资源名称并在实际方法的首字母大写。
ResourceRegistrar
在服务提供商class YourRegistrar extends \Illuminate\Routing\ResourceRegistrar
{
protected function getResourceAction($resource, $controller, $method, $options)
{
$name = $this->getResourceRouteName($resource, $method, $options);
// check if 'pre' option was set
$method = isset($options['pre']) ? $resource . ucfirst($method) : $method;
$action = ['as' => $name, 'uses' => $controller.'@'.$method];
if (isset($options['middleware'])) {
$action['middleware'] = $options['middleware'];
}
return $action;
}
}
中(将新类绑定到当前的@register
):
ResourceRegistrar
在路线文件中:
$this->app->bind(
\Illuminate\Routing\ResourceRegistrar::class,
\Where\Ever\YourResourceRegistrar::class
);
路由器会先检查容器上的Route::resource('user', 'SettingsController', ['pre' => true]);
// SettingsController@userIndex
// SettingsController@userShow
// ...
Route::resource('user', 'SettingsController');
// SettingsController@index
// SettingsController@show
// ... normal
的名称是否已绑定,然后再进行更新。如果存在绑定,它将要求容器解析一个绑定。这样可以扩展ResourceRegistrar
,然后路由器使用您的版本。
在我们的版本中,我们正在检查是否设置了选项键ResourceRegistrar
。如果是这样,我们将相应地调整路由的方法名称。 (pre
)
您可以在$method = isset($options['pre']) ? $resource . ucfirst($method) : $method;
上阅读更多信息,并在我的博客文章中详细了解上述内容: