【问题标题】:Use automatic controller routes in Laravel is a bad idea在 Laravel 中使用自动控制器路由是个坏主意
【发布时间】:2013-02-20 06:50:54
【问题描述】:

我从 CodeIgniter 来到 Laravel。

那么,使用自动路由到所有控制器是一个坏主意吗?

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

我应该使用它来代替在 routes.php 中创建路由吗?

【问题讨论】:

    标签: php laravel laravel-3


    【解决方案1】:

    是的,这很糟糕。

    Controller::detect() 实际上在 Laravel 4 中不存在,因为它有点坏了。

    detect() 将通过您的文件系统并返回控制器文件,但这是一个坏主意,因为您定义路由的顺序很重要。如果你有任何嵌套的控制器,你会发现这很容易被破坏。

    detect() 还会根据文件系统以不同的顺序返回文件,因此这会导致很多不可预测性。

    我认为您应该以任何方式定义所有路由,这样更容易阅读和调试。

    【讨论】:

      【解决方案2】:

      关于 Laravel,CI 没有的一个有趣的事情是,对于某些页面,您可以直接路由到视图,而根本不需要控制器。想想像“关于我们”这样的静态页面。 CodeIgniter 需要您为此设置一个控制器 + 视图,即使控制器几乎不会做任何事情。在 Laravel 的情况下,您可以在这种情况下直接路由到视图。

      手动设置路线将允许您设置这些短路路线。

      【讨论】:

      • 真的很有趣。谢谢!
      【解决方案3】:

      自动检测是个坏主意。

      您可以使用路由或使用 Route::controller('mycontroller') 或控制器数组,例如 Route::controller(array('mycontroller', mycontroller2');

      那么您将获得好处,而无需自动检测。

      【讨论】:

        【解决方案4】:

        在 laravel 4 中:

        你可以像文档http://laravel.com/docs/controllers#restful-controllers一样使用Restful Controller

        但是 Route::controller() 必须以两个参数为最低要求 第一个参数代表URL响应,第二个参数是控制器名称

        还有

        您可以将第三个参数写入Route::controller() 是一个包含动作名称的数组(带有 HTTP 动词的动作名称)和此动作的路由名称

        例如:

        Route::controller('users','UsersController',array(
                    'getUsers' =>"listUsers" , 
                   ));
        

        getUsers 操作的路由名称是 listUsers

        【讨论】:

          【解决方案5】:

          以下是 CRUD 和通用路由的一个很好的示例

          输入php arisan controller:make SampleController

          编辑routes.php并添加

          Route::resource('sample', 'SampleController'); 
          

          然后输入 php artisan routes 显示新创建的路线

          【讨论】:

            猜你喜欢
            • 2014-02-27
            • 2021-08-12
            • 2014-03-05
            • 2017-10-17
            • 1970-01-01
            • 2014-08-26
            • 1970-01-01
            • 2016-06-15
            • 2014-07-20
            相关资源
            最近更新 更多