У меня есть пакет, который должен автоматически загружать PHP-файл, не содержащий имен, когда пакет включен в приложение.Автоматически включать файл в пакет, если он включен в состав Composer
Ниже моя общая структура каталогов
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--
Первоначально я думал использовать механизм автоматической загрузки «файлы» в «пакетах/пакетОтель/composer.json» с:
{
...
"autoload": {
"psr-4": { ... }
"files": ["constants.php"]
}
}
Однако это не требует констант.php, если PackageA
включен как зависимость в appA
. Чтобы исправить это, вместо того, чтобы "files": [...]
в «пакетах/пакетОтель/composer.json», я поставил следующий в разделе автозагрузки «приложение/appsA/composer.json»:
"files": ["vendors/packages/PackageA/constants.php"]
Это не очень желательно, потому что каждый приложение, использующее PackageA
, нуждается в этом. Я бы подумал, что характер композитора позволил бы мне убедиться, что файлы в пределах PackageA
имеют доступ к (то есть, должны включать) определенный процедурный код, как в случае констант конфигурации. Есть ли способ сделать это?
Есть ли причина, по которой вы не можете добавить пространство имен в свой файл 'constants.php' и использовать обычную автозагрузку? – Chris
@Chris, потому что в php <5.6 я не могу объединить константы класса с другими константами, такими как '__DIR__' – jeremy