更改Laravel的默认(根)控制器

时间:2013-03-08 11:13:55

标签: php routing laravel

在Laravel中,默认控制器是Home_Controller。但是我有一个名为frontend的控制器。我想用它而不是家用控制器。

当我注册这样的路线时:

Route::controller(Controller::detect());

然后将在{@ 1}}等家庭控制器内处理对/offer的请求。我想使用home@offer并从网站的根目录访问它 - 而不是frontend@offer

我该怎么办? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

Home_Controller是Laravel 3中存在的硬编码约定之一,但仍有一些方法可以定义路由以指向Frontend_Controller方法,我的偏好是。

Route::any('/(index|offer|something)', function ($action)
{
    return Controller::call("frontend@{$action}");
});

此限制是您需要在Frontend_Controller中定义所有支持的“操作”方法。

答案 1 :(得分:1)

我的猜测是你认为Home_Controller是某种默认值的唯一原因是因为你使用的是Controller :: detect();我真的没有在文档中看到任何东西让我觉得Home_Controller是特别的东西。事实上,它甚至看起来不像它在示例文档中被路由到。鉴于此,我的第一个建议是摆脱Controller :: detect(),看看是否能解决你的问题。

除此之外,您是否尝试将前端注册为名为home的路线?似乎所有URL :: home()都会搜索“Home”路由,然后重定向到它。使用控制器路由时,可以使用某些效果来完成。

Route::get('/',
    array(
         'as' => 'home',
         'uses' => 'frontend@index'
    )
);

或者那不是你想要的效果吗?您是否希望将未找到的所有路由重定向到您的前端控制器?

如果您担心自己的网址看起来很漂亮,那么您可以在.htaccess文件中使用一些重写规则,以便让您的用户对路由到/ frontend / index的整个过程变得透明。

答案 2 :(得分:0)

将此添加到routes.php:

Route::get('/', array('as' => 'any.route.name', 'uses' => 'frontend@offer'));

如果您有任何其他/路线,请将其删除。