我正在使用Laravel 5.1,并创建一个路由资源,如:Route::resource('/page', 'PagesController');
。但我不希望/page
成为我的资源,或/page/about
。我宁愿拥有/about
等等。
然而,当我使用Route::resource('/', 'PagesController');
时,我的名字和URI被破坏了。要恢复我用过的名字:
Route::resource('/page', 'PagesController', [
'names' => [
'index' => 'pages.index',
'show' => 'pages.show',
'create' => 'pages.create',
'store' => 'pages.store',
'edit' => 'pages.edit',
'update' => 'pages.update',
'destroy' => 'pages.destroy'
]
]);
这使/
转到索引文件,但/about
等不起作用,因为URI(显示为{}
)没有任何参数。
我可以使用$router->get('/', 'PagesController@index");
之类的方式手动设置我的所有路线,但是对于所有内容而言,其中一条路线似乎是错误的方法。
如何使用参数设置要在根目录中使用的路由资源?
答案 0 :(得分:0)
我遇到了同样的问题,但我找不到任何解决方案。
在 laravel / framework / src / Illuminate / Routing / ResourceRegistrar.php 中查看注册函数,在这种情况下我们可以看到$ base为null:
time_t t = array[i]->mod_time;
printf("mod_time: %s\n", ctime(&t));
这会使添加方法出错:
// We need to extract the base resource from the resource name. Nested resources
// are supported in the framework, but we need to know what name to use for a
// place-holder on the route wildcards, which should be the base resources.
$base = $this->getResourceWildcard(last(explode('.', $name)));
$defaults = $this->resourceDefaults;
foreach ($this->getResourceMethods($defaults, $options) as $m) {
$this->{'addResource'.ucfirst($m)}($name, $base, $controller, $options);
}
我不确定如果我们可以做更多的事情而不是手动添加每种方法,但这就是我在我的案例中所做的。