Плагин не загружен в CakePHP 3.7.1 - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть собственный плагин с именем «Администратор» внутри папки плагинов.Я также добавил папку требуется.Я добавил следующий код:

Внутри: плагины / Администратор / config / route.php

use Cake\Routing\Route\DashedRoute;
use Cake\Routing\Router;
Router::plugin(
    'Administrator',
       ['path' => '/admin'],
       function ($routes) {
          $routes->fallbacks(DashedRoute::class);
       }
  );

Внутри: src / Application.php

$this->addPlugin('Administrator', ['routes' => true]);

Внутри: config / route.php

$routes->scope('/admin', function ($routes) {
    $routes->loadPlugin('Administrator');
});

Внутри браузера, когда я вхожу http://localhost/c3app/admin/users

Этопоказывает ошибку " Ошибка: AdminController не найден. "

Я добавил код в composer.json файл

 "autoload": {
    "psr-4": {
        "App\\": "src/",
        "Administrator" : "./plugins/Administrator/src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\\Test\\": "tests/",
        "Cake\\Test\\": "vendor/cakephp/cakephp/tests/",
        "Administrator" : "./plugins/Administrator/src"
    }
},

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Плагины должны быть зарегистрированы в composer.json начиная с CakePHP 3.7. * Для обеспечения автозагрузки.

Эта ошибка может произойти, если вы создаете плагин вручную или используете cake bake plugin, а не переопределяет composer.json (по умолчанию).

Если вы загружаете плагин в App\Application::bootstrap() через

$this->addPlugin('Admin', ['bootstrap' => true, 'routes' => true]);

, он вызывает метод в Cake\Http\BaseApplication::makePlugin, который вызывает class_exists () функция.Но это работает, только если плагин зарегистрирован в composer / autoload и класс будет найден.

Чтобы решить эту проблему, добавьте плагин в файл composer.json:

"autoload": { "psr-4": { "App\\": "src/", "Administrator\\": "./plugins/Administrator/src/" } },

и обновите файлы автозагрузки композитора:

composer dumpautoload

кажется ошибкой в ​​CakePHP 3.7.0.и 3.7.1.

Не ошибка, см. комментарий CodeWhisperer

0 голосов
/ 28 декабря 2018

Во-первых, файлы должны иметь имя routes.php вместо route.php.

В config/routes.php удалить код.
Далее, в plugins/Administrator/config/routes.php добавить следующий код:

Router::prefix('admin', function (RouteBuilder $routes) {
    $routes->plugin('Administrator', function (RouteBuilder $routes) {
        $routes->fallbacks();
    });
});

В config/bootstrap.php добавить код ниже:

Plugin::load('Auth', [
    'autoload' => true,
    'routes' => true,
]);
...