Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更改Laravel';s默认(根)控制器_Php_Routing_Laravel - Fatal编程技术网

Php 更改Laravel';s默认(根)控制器

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

在Laravel中,默认的控制器是
主控制器
。但是我有一个叫做前端的控制器。我想用这个代替家庭控制器

当我注册这样的路线时:

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。