【问题标题】:Laravel 3.x - Auto detect RoutesLaravel 3.x - 自动检测路由
【发布时间】:2013-04-24 10:47:11
【问题描述】:

我正在构建一个 CMS 并尝试在路线方面使用更好的方法。假设我有一个“页面”控制器和以下方法:“创建”、“编辑”和“删除”。它们的 URI 应该是这样的:

admin/pages/create
admin/pages/edit
admin/pages/delete

我可以对路线进行硬编码,一切都会好起来的,但很快就会一团糟。我搜索了很多,找到了下面的代码:

Route::any('admin/(.*)', array('defaults' => 'index', 'uses' => 'admin.METHOD@(:1)'));

想法是从 URL 中检测方法并将其替换在“admin.METHOD@”中。该代码将处理请求并将其定向到正确的控制器方法,但我不知道该怎么做。

任何帮助都是完美的。

【问题讨论】:

    标签: routes laravel laravel-3


    【解决方案1】:

    好的,您可以在 Laravel 3 中执行此操作,但您需要注意一些问题。首先是它的外观。

    Route::any('admin/(:any)/(:any)', 'admin.(:1)@(:2)');
    

    这将匹配 yourapp.dev/admin/pages/create 的 URI 并将其路由到 Admin_Pages_Controller 控制器上的 get_create 方法。

    您首先需要注意的是 URI 中是否包含连字符。你最终可能会得到Admin_User-accounts_Controller,因为 Laravel 不做任何检测。在这些情况下,在路由中使用Controller::call() 可能更容易。

    Route::any('admin/(:any)/(:any)', function($controller, $method)
    {
        return Controller::call("{$controller}@{$method}");
    });
    

    目前这与前面的示例相同。您需要对变量进行任何替换和研究。您还可以通过将方法设为可选并恢复为默认方法(例如 index)来举这个例子。

    基本上你想要实现的是资源丰富的路由,它在 Laravel 4 中处理得更干净。我快速搜索了 Laravel 3 包存储库并想出了Routely。从这个捆绑包的外观来看,它为您完成了很多繁重的工作,并且非常可定制。

    【讨论】:

      【解决方案2】:

      “Controller::detect 方法简单地返回为应用程序定义的所有控制器的数组。” - Laravel 3 文档

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

      【讨论】:

      • 我强烈建议人们避免使用这种方法,因为检测到的控制器的顺序可能因系统而异,这通常会导致意外行为,包括某些路由抛出 404。
      • 我同意你的看法,我相信我们的其他解决方案都是最好的方法,但我知道人们喜欢有自己的选择。尽管我会放弃一些额外的知识。
      【解决方案3】:

      理想情况下,您应该从容应对,并为每个 HTTP 动词(请求方法)设置不同的路由。从那里,也许您只需通过单个控制器发送所有流量。

      // Create
      Route::post('admin/(:any)', 'your_controller@(:1)');
      
      // Edit
      Route::put('admin/(:any)', 'your_controller@(:1)');
      
      // Delete
      Route::delete('admin/(:any)', 'your_controller@(:1)');
      

      从这里,您的控制器可以为您想要处理的所有不同类型的事物定义方法。如post_pages()、put_modules()、delete_entries()等

      【讨论】:

        猜你喜欢
        • 2013-06-21
        • 1970-01-01
        • 2014-10-13
        • 2015-09-29
        • 2015-02-23
        • 2016-05-03
        • 2013-06-26
        • 2020-12-04
        • 2013-03-04
        相关资源
        最近更新 更多