【问题标题】:Grouping Laravel controllers in folders在文件夹中分组 Laravel 控制器
【发布时间】:2014-07-31 01:26:07
【问题描述】:

为了组织我的控制器,我想将它们分类到文件夹中。例如,我有一个管理面板,它使用了许多我不想与其他控制器混淆的控制器。我将这些控制器移动到我的 /controllers 目录中的一个文件夹中。

所以我的结构是这样的:

controllers /
    BaseController.php
    HomeController.php

    admin /    
       AdminController.php

现在我的管理控制器看起来像这样:

namespace Admin;

class AdminController extends \BaseController {

    public function getHome() {

        return \View::make('admin.home');

    }

}

然后我可以为我的管理面板做一个分组路由:

Route::group(['namespace' => 'Admin'], function() {

    Route::get('admin', ['as' => 'admin', 'uses' => 'AdminController@getHome']);

});

这绝对没有错,我发现必须使用 \ 为这些控制器中的每个类命名空间是一件令人讨厌的事情。有没有办法可以消除必须在管理员下对这些控制器中的每个类进行命名空间的使用?例如,我不想输入\View::make(),我想输入View::make()

【问题讨论】:

  • 解决这个问题的唯一方法是将use View; 放在 PHP 文件的顶部,在 namespace 声明之后(实际上是对 PHP 说“从全局命名空间获取视图”并将其导入此处供我使用,就好像相对')。
  • 那么对于每个类我都需要使用它来引用它?
  • 我无法将它们合二为一?
  • 如果你在一个命名空间中,你基本上将自己与全局命名空间疏远了,所以你需要在每个命名空间类中使用use(或你知道的``)想要从全局命名空间导入。那是(相当烦人的)妥协。幸运的是,全局函数之类的东西可以工作,因为 PHP 在当前命名空间中尝试该函数,然后通过命名空间向后跟踪,直到找到与您使用的名称匹配的函数。但它不会对类执行此操作。
  • 那么我猜最简单的方法就是在类前面加上命名空间。

标签: php laravel


【解决方案1】:

看起来您希望控制器类仍位于全局命名空间中,但希望能够将它们组织到文件夹中。

如果您查看composer.json,您会看到默认控制器文件夹由“classmap”直接自动加载到该文件夹​​。因此,您可以将其他文件夹添加到列表中。像这样:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/controllers/admin", <-- additional folders
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
    ]
},

请注意,我将"app/controllers/admin" 添加到classmap 数组中。您可以根据需要添加任意数量。然后做一个composer dump-autoload

执行相同方法的另一种方法是修改您的app/start/global.php

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/controllers/admin', // additional folders
    app_path().'/models',
    app_path().'/helpers',
    app_path().'/database/seeds',

));

AFAIK,这与修改composer.json 文件的效果相同,只是在添加新路径后您不需要执行任何composer 命令。


请注意,如果您不希望您的代码变得相当大,那么上面的整个答案都会很好地工作。想象一下,必须以这种方式维护数十个控制器文件夹,还有类名冲突的风险。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2014-11-24
    • 2015-05-31
    • 2019-01-18
    • 2012-12-28
    • 2013-09-21
    相关资源
    最近更新 更多