【发布时间】:2016-12-11 09:17:24
【问题描述】:
我有一个包,当包包含在应用程序中时,它必须自动加载非命名空间的 PHP 文件。
下面是我的一般目录结构
packages/
+-- PackageA/
+-- Entities/
+-- Mappers/
+-- Services/
+-- composer.json
+-- constants.php
apps/appA/
+-- vendors/
+-- autoload/
+-- composer.json
apps/appB/
+-- vendors/
+-- composer.json
我已按照here 的指示使用路径存储库使PackageA 成为appA/ 的依赖项。这部分工作顺利。
PackageA 中的某些文件需要访问常量,主要是文件路径。这就是“constants.php”的用途,这些值是按程序定义的:
<?php
define('XML_REPO_PATH', __DIR__ . '/../blah/xml/');
// --etc--
我最初想在“packages/PackageA/composer.json”中使用“文件”自动加载机制:
{
...
"autoload": {
"psr-4": { ... }
"files": ["constants.php"]
}
}
但是,当 PackageA 作为依赖项包含在 appA 中时,这不需要 constants.php。为了解决这个问题,我没有将"files": [...] 放在“packages/PackageA/composer.json”中,而是将以下内容放在“app/appsA/composer.json”的自动加载部分:
"files": ["vendors/packages/PackageA/constants.php"]
这不是很理想,因为每个使用PackageA 的应用程序都需要这个。我认为 composer 的性质将允许我确保 PackageA 中的文件可以访问(即,旨在包含)某些过程代码,例如在配置常量的情况下。有没有办法做到这一点?
【问题讨论】:
-
您是否有理由无法将命名空间添加到您的
constants.php文件并使用常规自动加载? -
@Chris 因为在 php __DIR__ 等其他常量连接起来
标签: php composer-php dependency-management