将Laravel控制器分组到文件夹中

时间:2014-07-30 14:29:52

标签: php laravel

要组织我的控制器,我想在文件夹中对它们进行排序。例如,我有一个管理面板,它使用了许多我不希望与其他控制器混淆的控制器。我将这些控制器移到了/ 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()

1 个答案:

答案 0 :(得分:3)

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

如果您查看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命令。


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