2015-04-01 126 views
0

我在Laravel 5应用程序中开发一组packag。自定义作曲家自动加载目录,加载多个包

所有包都有以下结构。

文件夹结构:

Vendor/Package/src

composer.json

"autoload": { 
    "psr-4": { 
     "Vendor\\Package\\": "src/" 
    } 
}, 

我希望能够有一个包含包vendors/文件夹以外的单独的文件夹, 正在开发中。因为它们是应用程序的基础。注意:这些软件包不会通过作曲家下载,只需使用作曲家自动加载。

例如

\Laravel-App 
    \app 
    \bootstrap 
    \config 
    \database 
    \public 
    ... 
    \src 

\src包含上述所有软件包的目录。

+0

如果我所有的软件包里面都没有'\ src'目录,那么它可以工作......虽然我需要额外的软件包层。我可以在psr-4自动加载中包含很多命名空间,尽管这似乎很艰难 – AndrewMcLagan 2015-04-01 03:51:21

+0

创建另一个函数来攻击[spl_autoload](http://php.net/manual/en/function.spl-autoload.php),该加载基于你正在开发的软件包的指令? – Jon 2015-04-01 03:53:05

回答

0

每个包中都有一个composer.json是不相关的,因为这些不是由composer(尚未)管理的。如果软件包已安装/更新,它们的自动载入定义将仅用于Composer的自动载入转储。 这里没有由Composer处理,只是坐在一个文件夹中。

解决自动加载问题有多种方式。 你可以:

  • 使用PHP自动加载功能,注册自己的自动加载(引导过程中)
  • 使用Laravel的自动装弹机的路径添加到这些包(应用程序引导过程中,经过的地方laravel自动加载磁带机初始化)
  • 使用Composer的自动加载器来添加这些包的路径(在应用程序引导过程中,在Composer初始化之后)
  • 但最简单的方法是在主应用程序的composer.json文件的自动加载部分中定义映射。然后,在安装或更新Composer管理的依赖关系之后,它们将被包含在转储的自动加载器中。