Как определить путь к autoload.php с помощью композитора

StackOverflow https://stackoverflow.com//questions/22027658

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня есть композиторский проект, назовите его MyVendor\Database.Этот проект использует композитор и автозагрузку.В этом проекте есть несколько файлов, которые имеют:

require_once __DIR__."/../vendor/autoload.php";

чтобы использовать автозагрузку.

Все отлично работает, пока я не включу MyVendor\Database в другом проекте.

У меня есть еще один проект, назовите его MyVendor\CoolPackage это требует MyVendor\Database.

Я запускаю установку композитора на CoolPackage и он загружается MyVendor\Database в папку поставщика.

Однако проблема заключается в том, что мои файлы внутри vendor\MyVendor\Database провалиться, потому что они звонят require_once __DIR__."/../vendor/autoload.php", но внутри нет папки поставщика \vendor\MyVendor\Database.

Это было полезно?

Решение

В вашей composer.json вы определяете схему автозагрузки.По причинам, которые вы сейчас выяснили сами, не рекомендуется вызывать автозагрузку Composer внутри любого из файлов, которые должны быть автоматически загружаемыми не только внутри этого приложения или модуля, но и в любом другом приложении.

По сути, файлы в любом проекте Composer должны быть разделены на основе определения автозагрузки PSR-0 или 4:Они либо ТОЛЬКО объявляют классы или функции БЕЗ каких-либо побочных эффектов (например, выполнения кода), либо выполняют код без определения классов или функций.Только предыдущие файлы могут быть загружены автоматически (за исключением функций, которые всегда можно объявить только путем загрузки файла, содержащего их, с помощью files раздел автозагрузки), последний НЕ должен автоматически загружаться.

И тогда это должно стать относительно легко:Все классы, которые можно загружать автоматически, также можно использовать, когда этот компонент включен в другое приложение.Все остальное, что не является классом, не может использоваться напрямую.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top