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
и все заработало!