如何使用root

时间:2015-09-08 04:12:41

标签: routes laravel-5

我正在使用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");之类的方式手动设置我的所有路线,但是对于所有内容而言,其中一条路线似乎是错误的方法。

如何使用参数设置要在根目录中使用的路由资源?

1 个答案:

答案 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);
}

我不确定如果我们可以做更多的事情而不是手动添加每种方法,但这就是我在我的案例中所做的。