0

在 Laravel 中,默认控制器是Home_Controller. 但是我有一个称为前端的控制器。我想用这个代替家庭控制器。

当我注册这样的路线时:

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

然后一个请求/offer将从家庭控制器中处理,如home@offer. 我想frontend@offer从站点的根目录使用和访问它 - 不像/frontend/offer.

我应该怎么办?提前致谢。

4

3 回答 3

1

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

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

这样做的限制是您需要在Frontend_Controller.

于 2013-03-08T17:30:11.343 回答
1

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

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

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

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

如果你担心你的 url 看起来很漂亮,你可以在你的 .htaccess 文件中使用一些重写规则来使路由到 /frontend/index 的整个过程对你的用户透明。

于 2013-03-10T03:54:39.963 回答
0

将此添加到您的 routes.php :

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

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

于 2013-03-08T12:00:10.033 回答