Php 更改Laravel';s默认(根)控制器
在Laravel中,默认的控制器是Php 更改Laravel';s默认(根)控制器,php,routing,laravel,Php,Routing,Laravel,在Laravel中,默认的控制器是主控制器。但是我有一个叫做前端的控制器。我想用这个代替家庭控制器 当我注册这样的路线时: Route::controller(Controller::detect()); 然后,对/offer的请求将从家庭控制器内部处理,如home@offer。我想使用frontend@offer并从站点的根目录访问它-不像/frontend/offer 我该怎么办? 提前感谢。将此添加到您的routes.php: Route::get('/', array('as' =&g
主控制器
。但是我有一个叫做前端的控制器。我想用这个代替家庭控制器
当我注册这样的路线时:
Route::controller(Controller::detect());
然后,对/offer
的请求将从家庭控制器内部处理,如home@offer
。我想使用frontend@offer
并从站点的根目录访问它-不像/frontend/offer
我该怎么办?
提前感谢。将此添加到您的routes.php:
Route::get('/', array('as' => 'any.route.name', 'uses' => 'frontend@offer'));
如果您有任何其他
/
路由,只需将其删除。Home\u Controller
是Laravel 3中存在的硬编码约定之一,但是仍然有一些方法可以定义路由以指向Frontend\u Controller
方法,我的首选方法是
Route::any('/(index|offer|something)', function ($action)
{
return Controller::call("frontend@{$action}");
});
这样做的局限性在于,您需要在
Frontend_Controller
中定义所有受支持的“actions”方法。我猜想,您认为Home_控制器是某种默认控制器的唯一原因是因为您使用的是Controller::detect();我真的没有在文档中看到任何让我觉得Home_控制器有什么特别之处。事实上,在示例文档中,它甚至看起来不像是路由到的。有鉴于此,我的第一个建议是去掉Controller::detect(),看看这是否能解决您的问题
除此之外,您是否尝试将前端注册为名为home的路线?似乎URL::home()所做的就是搜索“home”路由,然后重定向到它。当使用控制器路由时,这可以通过以下方式完成
Route::get('/',
array(
'as' => 'home',
'uses' => 'frontend@index'
)
);
或者这不是你想要的效果?是否要将所有未找到的路由重定向到前端控制器
如果您担心您的URL看起来很漂亮,您可能可以在.htaccess文件中使用一些重写规则,使发送到/frontend/index的整个过程对您的用户透明。作为一个话题,我不建议您使用Controller::detect()。不建议在Laravel3上使用它,并且完全从Laravel4中删除它,因为它存在问题,并且开发人员几乎无法控制路线。您应该使用Route::controller(“controller\u name\u here”)。@ViníciusFragosoPinheiro谢谢!你能提供一个来源,让我可以阅读更多吗?这是最好的地方。即使它开始建议Controller::detect(我希望有一天他们会解决这个问题),下面几行中有一个关于同时注册主控制器和多个控制器的示例。现在,关于Controller::detect,论坛上有很多关于不要使用它的建议。这里也有一些关于Controller::detect()的问题。只需删除这个问题:area51.stackexchange.com/Propositions/46607/laravelI,我想你不理解这个问题。我想注册一个控制器,而不是一个动作。控制器是一个类,一个方法必须被调用
index
或者其他什么,不是吗:)请看我对第二个答案的评论。我想“替换”home
控制器的硬编码定义,因此URL::home()
解析为frontend@index
我已经试过了,但我想改变“硬编码”的定义,正如你所说。我的意思是,函数URL::home()
将输出frontend@index
而不是home@index
,以及使用此控制器作为默认控制器。并且-家庭\ U控制器是硬编码的控制器之一,我可以更改硬编码配置吗?太棒了。但是我不能去掉控制器前缀,我想我可以在laravel中更改它,而不是修改.htaccess文件。控制器前缀的确切含义是什么?“让发送到/frontend/index的整个过程对您的用户透明。”-我的意思是/frontend/{action}
将是/{action}
是的,那么我建议不要费心在拉雷维尔这样做。相反,我会在.htaccess文件中添加一个重写规则,将所有规则从/{action}重写到/frontend/{action}。将该路由放在Laravel中会在应用程序中引入不必要的耦合。在.htaccess文件中执行此操作可以让您在将来随心所欲地重写URL。