Торт PHP 4 пользовательских плагинов не найти классов - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь создать пользовательский плагин для Cake PHP 4. Но каждый раз, когда я получаю ошибку, что плагин не может найти классы плагина.

Я загружаю плагин в приложении. php

use Wirecore\CakePHP_JWT\Plugin as CakePHPJwt;

$plugin = new CakePHPJwt();
$this->addPlugin($plugin);

В файле торта composer. json он также загружен:

"autoload": {
    "psr-4": {
        "App\\": "src/",
        "Wirecore\\CakePHP_JWT\\": "./plugins/CakePHP-JWT-Plugin/src/"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\\Test\\": "tests/",
        "Cake\\Test\\": "vendor/cakephp/cakephp/tests/",
        "Wirecore\\CakePHP_JWT\\Test\\": "./plugins/CakePHP-JWT-Plugin/tests/"
    }
}

, и я создаю файл в / plugins / Cake PHP -JWT -Plugin / src / Middleware / JwtMiddleware. php с примером кода документации Middleware . Я изменил пространство имен примера кода на

namespace Wirecore\CakePHP_JWT\Middleware;

, после этого я пытаюсь загрузить середину в функции промежуточного программного обеспечения плагина, но каждый раз я получаю эту ошибку:

Класс «Wirecore \ CakePHP_JWT \ Middleware \ TrackingCookieMiddleware» не найден

здесь код функции промежуточного программного обеспечения:

use Wirecore\CakePHP_JWT\Middleware\TrackingCookieMiddleware;

$middlewareQueue->add(new TrackingCookieMiddleware());
return $middlewareQueue;

я пытался изменить пространство имен, но оно не работает, и я пробую это с composer dumpautoload, но опять ничего не изменилось. Есть идеи?

1 Ответ

1 голос
/ 18 апреля 2020

Раздел автозагрузки в файле composer - это то, что PHP сообщает, как найти ваши пространства имен на диске. Ваш префикс пространства имен для класса Wirecore\CakePHP_JWT не является пространством имен, которое вы перечислили в разделе autoload, вы перечислили Wirecore\CakePHP-JWT-Plugin. Либо исправьте объявление пространства имен, чтобы оно совпадало с автозагрузкой, например:

use Wirecore\CakePHP-JWT-Plugin\ .. etc

.., либо измените исправление раздела автозагрузки, чтобы оно совпадало с именем, указанным в объявлении пространства имен:

"autoload": {
    "psr-4": {
        "Wirecore\\CakePHP_JWT\\": "src/"
    }
},
"autoload-dev": {
    "psr-4": {
        "Wirecore\\CakePHP_JWT\\Test\\": "tests/",
        "Cake\\Test\\": "vendor/cakephp/cakephp/tests/"
    }
}

Также, Я не уверен, какие стандарты вы придерживаетесь здесь, но они потенциально не выглядят правильно.

Это автономный плагин? Если это так, я бы отразил структуру от другого автономного плагина, например https://github.com/dereuromark/cakephp-geo/

Если этот не автономный плагин (что кажется более вероятным ), но просто пользовательский плагин, вставляемый непосредственно в существующее приложение Cake PHP, ваши классы должны застревать в /plugins, а не /src, в соответствии с документами https://book.cakephp.org/4/en/plugins.html#creating -your-own-plugins

Вы можете просто использовать утилиту Bake в качестве отправной точки (которая также решит ваши проблемы с автозагрузкой!) И скопировать ваш код в создаваемые им классы.

...