【发布时间】:2013-03-24 08:02:50
【问题描述】:
我是具有 CI 背景的 Laravel 3.x 初学者。
我非常熟悉使用控制器而不是路由,我在尝试在 Laravel 中使用控制器时遇到了问题。
例如:假设我有 home_controller 和“关于”操作。我的问题是我只能通过设置指向它的路由来访问“关于”操作 - 我认为这是不可取的。
有没有办法让“关于”操作在不设置路线的情况下工作?
【问题讨论】:
我是具有 CI 背景的 Laravel 3.x 初学者。
我非常熟悉使用控制器而不是路由,我在尝试在 Laravel 中使用控制器时遇到了问题。
例如:假设我有 home_controller 和“关于”操作。我的问题是我只能通过设置指向它的路由来访问“关于”操作 - 我认为这是不可取的。
有没有办法让“关于”操作在不设置路线的情况下工作?
【问题讨论】:
一切都必须在 Laravel 中路由。但是,您不必手动路由每种方法。您可以按照Route::controller('admin') 的方式做一些事情。
【讨论】:
Route::controller(Controller::detect()),但不推荐,因为它可能有问题,具体取决于您的设置。
在 laravel 中,一切都可以使用路由和/或控制器来完成。
但是,建议同时使用路由和控制器以提高灵活性。有关如何将路由与控制器组合的更多信息和一些示例,请参阅this article。
无论如何,如果您想使用控制器(这是完全可以接受的),您需要在您的routes.php 和Route::controller('yourcontroller') 中注册它们,然后才能使用它们。
【讨论】:
您必须像上面的示例一样注册所有控制器。它是每个控制器的一行代码,它是规则。 但如果你有一个静态页面或登录动作(页面),一个好的做法是创建一个 Route 控制器(匿名函数),而不是经典控制器(在 controllers 文件夹中)。
【讨论】:
我喜欢 Mike Anthony 的解决方案。当您仅使用控制器时,此检测方法就是您必须做的一切 - 这将自动注册您的所有控制器。迄今为止最好的免提解决方案。 正如前面提到的,通常的控制器注册是这样的:
Route::controller('controllername');
【讨论】:
Controller::detect() 不应被提倡为解决方案。它不是并且会导致很多问题。像您展示的那样手动注册是一种更好的方法。