【问题标题】:Custom composer autoload directory, loading multiple packages自定义composer autoload目录,加载多个包
【发布时间】:2015-06-05 14:36:40
【问题描述】:

我正在一个 Laravel 5 应用程序中开发一组包。

所有包的结构如下。

文件夹结构:

Vendor/Package/src

composer.json

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

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

例如

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

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

【问题讨论】:

  • 如果我所有的包都没有\src 目录,那么它可以工作......虽然我需要包的额外层。我可以在 psr-4 自动加载中包含许多命名空间,尽管这看起来很困难
  • 创建另一个函数来攻击spl_autoload,该函数根据您正在开发的包的指令加载?

标签: php laravel package composer-php laravel-5


【解决方案1】:

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

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

  • 使用 PHP 自动加载函数注册您自己的自动加载器(在引导期间)
  • 使用 Laravel 的自动加载器添加这些包的路径(在应用程序引导期间,在 laravel 自动加载器初始化之后的某个位置)
  • 使用 Composer 的 Autoloader 添加这些包的路径(在应用引导期间,在 Composer 初始化之后)
  • 但最简单的方法是在主应用程序的composer.json 文件的自动加载部分定义映射。然后,在安装或更新 Composer 管理的依赖项之后,它们将包含在转储的自动加载器中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-24
    • 2015-07-11
    • 2011-07-17
    • 2017-03-28
    • 2012-11-01
    • 2020-07-13
    • 2017-12-11
    • 2016-04-17
    相关资源
    最近更新 更多