CakePHP3 Плагин класса автозагрузки

Я делаю плагин CakePHP3 и использую написанную мной библиотеку, которая использует автозагрузку PSR-4. Если мне требуется библиотека в приложении composer.json, она автоматически загружается, и я могу использовать ее в любом месте своего приложения, включая плагин. Когда я пытаюсь запросить его через composer.json моего плагина, он устанавливается нормально, и composer не выдает ошибок, но, похоже, не загружается автоматически. Когда я захожу на страницу, управляемую плагином, который использует библиотеку, я получаю сообщение об ошибке, что класс не найден.

Я делаю что-то неправильно? Я проверил vendor/composer/autoload_psr4.php в моей папке плагинов и мой класс находится в этом файле. Я тоже побежал composer dump-autoload как в каталоге приложения, так и в каталоге плагинов, но это не помогло.

Я испек плагин с cake bake plugin MyPlugin и затем отредактировал секцию require в плагине composer.json, чтобы включить мою библиотеку. Потом я побежал composer update и он установил библиотеку plugins/MyPlugin/vendor/mylibrary без ошибок.

2 ответа

Кажется, что-то не так при создании файла vendor / cakephp-plugins.php. Каким-то образом плагины CakePHP, которые вы устанавливаете самостоятельно, не включены в этот файл. При добавлении плагинов все работает нормально, но каждый раз, когда вы загружаете обновление / установку composer, этот файл перегенерируется, и вы потеряете свои изменения.

Я вижу, что плагины загружаются в vendor / composer / instal.json, но проблема, по-видимому, заключается в том, что их типом является "библиотека", где это должен быть плагин cakephp. Я не могу понять, что нужно изменить, поэтому CakePHP видит это как собственный плагин.

Я переместил свой запеченный плагин в его собственное git-репо, а затем добавил его в файл composer.json моего приложения и добавил свой плагин в качестве требования. Потом я побежал composer update в моем каталоге приложения, и мой плагин был установлен с его зависимостями в каталог vendor. Тогда мне просто нужно было загрузить плагин в config/bootstrap.php и все заработало!

Другие вопросы по тегам