组织Laravel和自动加载子目录

时间:2013-06-30 19:03:24

标签: php laravel laravel-4

我想以一种所有代码都在src目录下的方式构建我的laravel应用程序。我的项目结构如下所示。我怎么能这样做,我仍然可以拨打Route::get('accounting/item/{id}','AccountingItemController@getId')

我想避免将src下的每个模块添加到ClassLoader中。有没有办法告诉类加载器加载父目录src下的所有子目录?

app
app/src
app/src/accounting
app/src/accounting/controllers
app/src/accounting/models
app/src/accounting/repos
app/src/accounting/interfaces
app/src/job
app/src/job/controllers
app/src/job/models
app/src/job/repos
app/src/job/interfaces

2 个答案:

答案 0 :(得分:11)

是的,它被称为PSR-0。

您应该命名所有代码。通常,您将拥有一个供应商名称,您将使用顶级名称空间。您的应用程序结构应该是这样的。

app/src/Vendor/Accounting/Controllers
app/src/Vendor/Job/Controllers

您的控制器将相应地命名为。

namespace Vendor\Accounting\Controllers;

在路线中使用它们时。

Route::get('accounting/item/{id}','Vendor\Accounting\Controllers\ItemController@getId');

最后,您可以在composer.json

中使用Composer注册命名空间
"autoload": {
    "psr-0": {
        "Vendor": "app/src"
    }
}

当然,如果您不想要顶级Vendor命名空间,可以删除它,但是您需要将每个组件注册为PSR-0。

"autoload": {
    "psr-0": {
        "Accounting": "app/src",
        "Job": "app/src",
    }
}

完成后,运行composer dump-autoload一次,您应该能够添加新的控制器,模型,库等。只需确保目录结构与每个文件的命名空间一致。

答案 1 :(得分:1)

你有安装作曲家吗?你应该用这个:

composer dump-autoload

但是你可以将目录添加到Laravel的类加载器中。请在此处查看参考:http://laravel.com/api/class-Illuminate.Support.ClassLoader.html