Не могу создать простой плагин CakePHP

Я хотел бы создать плагин для CakePHP 3.1.4. Документация проста, но пример не работает (http://book.cakephp.org/3.0/en/plugins.html#creating-your-own-plugins)

Шаги:

composer create-project --prefer-dist cakephp/app sampleapp

Создайте базу данных. Подключиться к базе данных. Создайте таблицу «Контакты». Перейдите в каталог и запустите:

bin/cake bake plugin ContactManager

Создайте контроллер:

bin/cake bake controller --plugin ContactManager Contacts

Повторно сгенерируйте автозагрузчик:

composer dumpautoload

Добавьте эту строку в файл /config/bootstrap.php:

Plugin::load('ContactManager', ['routes' => true]);

Но теперь документация говорит

«Если вы хотите получить доступ к тому, что у нас есть, посетите /contact-manager/contacts. Вы должны получить сообщение об ошибке «Отсутствует модель», потому что у нас еще не определена модель контакта».

Но это не работает. Вместо этого я получаю сообщение об ошибке:

Отсутствует контроллер. Cake\Routing\Exception\MissingControllerException. Cake\Routing\Dispatcher->dispatch ROOT/webroot/index.php, строка 37 Ошибка: не удалось найти ContactManagerController. Ошибка: Создайте класс ContactManagerController ниже в файле: src/Controller/ContactManagerController.php

Это означает, что плагин не может быть загружен, иначе он не предложит это. При открытии DebugKit в разделе «Включить» плагин отсутствует в массиве плагинов.

Я проверил файлы composer.json, и в обоих плагин указан правильно. Команда испечь прошла без ошибок. Я попробовал описанные выше шаги с несколькими новыми проектами с разными именами.

В чем проблема? Большое Вам спасибо.


person ST2OD    schedule 24.11.2015    source источник
comment
Вы создали файл plugins/ContactManager/config/routes.php, как сказано в руководстве?   -  person ADmad    schedule 24.11.2015
comment
@ADmad Команда испечь для плагина уже создает этот файл, и содержимое файла соответствует документации. Я только что сделал еще одну попытку.   -  person ST2OD    schedule 25.11.2015
comment
При добавлении маршрутизации вручную в /plugins/ContactManager/config/routes.php он работает и показывает правильную страницу шаблона. Router::connect('/contactmanager/contacts/view/*',['plugin' => 'ContactManager', 'controller' => 'Contacts', 'action' => 'view']); Но это должно работать без добавления каждого маршрута для каждого действия вручную, верно?   -  person ST2OD    schedule 25.11.2015


Ответы (1)


Наконец, я нашел решение.

То, что говорится в документах, должно быть в /plugins/ContactManager/config/routes.php И что bake plugin создает:

Router::plugin('ContactManager', function ($routes) {
    $routes->fallbacks('DashedRoute');
});

Но что действительно должно быть в файле вместо приведенного выше фрагмента:

Router::scope('/contactmanager', ['plugin' => 'ContactManager'], function ($routes) {
    $routes->fallbacks();
});
person ST2OD    schedule 25.11.2015
comment
Если вы уверены, что это неправильно в документах, а также в результатах выпечки, я предлагаю сообщить об этом как о проблеме на GitHub, так что вы можете помочь улучшить платформу с открытым исходным кодом :-) - person Oops D'oh; 01.12.2015
comment
Выше, не работая для меня, я нашел другое решение. Router::plugin('ContactManager', ['path' => '/ContactManager'], function ($routes) { $routes->fallbacks('DashedRoute'); }); - person RavatSinh Sisodiya; 10.06.2016