在 Laravel 中,默认控制器是Home_Controller
. 但是我有一个称为前端的控制器。我想用这个代替家庭控制器。
当我注册这样的路线时:
Route::controller(Controller::detect());
然后一个请求/offer
将从家庭控制器中处理,如home@offer
. 我想frontend@offer
从站点的根目录使用和访问它 - 不像/frontend/offer
.
我应该怎么办?提前致谢。
Home_Controller
是 Laravel 3 中存在的硬编码约定之一,但是仍然有一些方法可以定义路由以指向Frontend_Controller
方法,我的偏好是。
Route::any('/(index|offer|something)', function ($action)
{
return Controller::call("frontend@{$action}");
});
这样做的限制是您需要在Frontend_Controller
.
我的猜测是,您认为 Home_Controller 是某种默认值的唯一原因是因为您使用的是 Controller::detect(); 我真的没有在文档中看到任何让我认为 Home_Controller 有什么特别之处的东西。事实上,它甚至看起来不像在示例文档中被路由到。鉴于此,我的第一个建议是摆脱 Controller::detect() 并查看是否可以解决您的问题。
除此之外,您是否尝试过将前端注册为名为 home 的路由?似乎所有 URL::home() 所做的都是搜索 'Home' 路由,然后重定向到它。当使用控制器路由时,这可以通过一些效果来完成。
Route::get('/',
array(
'as' => 'home',
'uses' => 'frontend@index'
)
);
或者这不是你想要的效果?您是否希望将所有未发现的路由重定向到您的前端控制器?
如果你担心你的 url 看起来很漂亮,你可以在你的 .htaccess 文件中使用一些重写规则来使路由到 /frontend/index 的整个过程对你的用户透明。
将此添加到您的 routes.php :
Route::get('/', array('as' => 'any.route.name', 'uses' => 'frontend@offer'));
如果您有任何其他/
路线,只需将其删除。