Здравствуйте. Подскажите, пожалуйста, как можно загрузить классы, определённые в композере, в скриптах композера? composer.json: Код (Text): { "name": "Some package", "license": "MIT", "minimum-stability": "dev", "require": { "php": "^7.3 || ^8.0" }, "autoload": { "psr-4": { "MyVendor\\": "src/" } }, "scripts": "MyVendor\\Database\\Migration::install" } MyVendor\\Database\\Migration::install: Код (Text): $db = \Config\Database::connect($velldoris_app_config->DBGroup); $migrations = service('Migrations', config('Config\Migrations'), $db); $migrations->latest(); Метод install должен запускать миграции при установке/обновлении пакета. Но, так как загруженных классов внутри него нет, то и выполнить что-либо невозможно. Понятное дело, что нужно подключить нужные мне классы (а лучше весь проект). Но как правильно это сделать? В доках композера нашёл только как определить путь до самого пакета, который устанавливается. А до загрузчика /vendor/autoload.php (который не пакетный, а самого композера) не могу найти.
https://stackoverflow.com/q/12781276/272885 How to define custom autoloader in composer? Код (Text): { "autoload": { "files": ["src/extra/autoloader.php"] } } если набирать в поисковике свой вопрос по английски, с большой вероятностью находится годное --- Добавлено --- Update: прости, не сразу понял вопрос. Как прописать путь до самого автозагрузчика composer — его очевидно надо прописать в твоей точке входа, т.е. в том файле на который вебсервер перекидывает все запросы, например в public/index.php require __DIR__.'/../vendor/autoload.php';
Спасибо за ответ! У меня и не получается определить точку входа в приложение из колбеков композера. В этом и вопрос. В документации вроде всё разжёвано: https://getcomposer.org/doc/articles/scripts.md Объект события передаётся в статический метода, указанный в свойстве scripts файла composer.json. В моём случае в install: Код (Text): "scripts": "MyVendor\\Database\\Migration::install" Но дальше не могу понять какой метода использовать. Смог получить директорию пакета: PHP: $event->getComposer()->getConfig()->get('vendor-dir'); Но этого мало, мне нужны классы самого приложения, а не только моего пакета. Колбеки композера запускаются без участия вебсервера. Надеюсь, правильно выразился.
PHP: define('PACKAGE_DIR', __DIR__); define('PROJECT_DIR', rtrim(stristr(PACKAGE_DIR, 'vendor', true), '/')); require PROJECT_DIR . '/vendor/autoload.php'; Придумал только такой топорный вариант. Если есть нормальный способ - подскажите, пожалуйста.