【问题标题】:Change Laravel's default (root) controller更改 Laravel 的默认(根)控制器
【发布时间】:2013-02-23 22:03:55
【问题描述】:

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

当我注册这样的路线时:

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

然后对/offer 的请求将在家庭控制器内处理,如home@offer。我想使用frontend@offer 并从站点的根目录访问它——不像/frontend/offer

我该怎么办? 提前致谢。

【问题讨论】:

  • 作为题外话,我不建议您使用 Controller::detect()。不建议在 Laravel 3 上使用它,并且从 Laravel 4 中完全删除它,因为它存在问题并且开发人员几乎无法控制路由。你应该使用 Route::controller('controller_name_here')。
  • @ViníciusFragosoPinheiro 谢谢!你能提供一个来源,以便我阅读更多内容吗?
  • Laravel Docs 是最好的地方。即使它开始建议 Controller::detect (我希望他们有朝一日会修复),下面还有几行关于一次注册家庭控制器和多个控制器的示例。现在,关于 Controller::detect,论坛上有onetwo 建议不要使用它。
  • 还有一些关于 Controller::detect() 的问题,例如 thisthis 这里也是如此。
  • 只删除这个:area51.stackexchange.com/proposals/46607/laravel

标签: php routing laravel


【解决方案1】:

将此添加到您的 routes.php 中:

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

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

【讨论】:

  • 我认为你没有理解这个问题。我想注册一个控制器,而不是一个动作。
  • 控制器是一个类,一个方法必须被称为index 或其他,不是吗:)
  • 在第二个答案中查看我的 cmets。我想“替换”home 控制器的硬编码定义,所以URL::home() 解析为frontend@index
【解决方案2】:

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

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

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

【讨论】:

  • 我已经试过了,但我想改变“硬编码”的定义,就像你说的那样。我的意思是,函数URL::home() 将输出frontend@index 而不是home@index,并且使用这个控制器作为默认值。
  • 而且 - Home_Controller 是硬编码之一,我可以更改硬编码配置吗?
【解决方案3】:

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

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

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

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

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

【讨论】:

  • 太棒了。但是我无法摆脱控制器前缀,我想我可以在 laravel 本身中更改它而不是修改 .htaccess 文件
  • 控制器前缀到底是什么意思?
  • "使路由到 /frontend/index 的整个过程对您的用户透明。" - 我的意思是/frontend/{action} 将是/{action}
  • 是的,那么我建议不要在 Laravel 中这样做。相反,我会在您的 .htaccess 文件中添加一个重写规则,它将您的所有规则从 /{action} 重写为 /frontend/{action}。将该路由放在你的 Laravel 中会在你的应用程序中引入不必要的耦合。在您的 .htaccess 文件中执行此操作可以让您在将来随意重写您的网址。
猜你喜欢
  • 2011-01-02
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 2019-03-04
相关资源
最近更新 更多