#php #cakephp #namespaces #autoload
#php #cakephp #пространства имен #автозагрузка
Вопрос:
Я пытаюсь написать плагин аутентификации CakePHP и слежу за ним и структурирую его после этого репозитория:https://github.com/ADmad/cakephp-jwt-auth
Я все еще на ранних стадиях, пытаюсь загрузить свой плагин с помощью метода CakePHPs constructAuthenticate()
. Я сузил свою проблему до того, что этот метод никогда не находит мой класс при вызове class_exists()
У меня есть структура проекта следующим образом:
App/
plugins/
src/
Controller/
AppController.php
Model/
vendor/
Admad/
cakephp-jwt-auth/
src/
Auth/
JwtAuthenticate.php
composer.json
nates/
cakephp-total-auth/
src/
Auth/
TotalAuthenticate.php
composer.json
TotalAuthenticate
это класс, который я пытаюсь загрузить, и его пространство имен, как определено в TotalAuthenticate.php
, является:
namespace natesTotalAuthauth;
После некоторой отладки я обнаружил, что передаваемый путь classs_exists()
является:
natesTotalAuthAuthTotalAuthenticate
Я сравнил всю эту информацию с Admad/JwtAuth
плагином, и все относительные пути совпадают, и этот плагин загружается просто отлично, поэтому я действительно в недоумении, что здесь происходит и почему мой плагин не загружается.
Моя автозагрузка в App/composer.json
выглядит следующим образом:
`"autoload": {
"psr-4": {
"App\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\Test\": "tests/",
"Cake\Test\": "vendor/cakephp/cakephp/tests/"
}
},`
И мои Плагины composer.json
:
`"autoload": {
"psr-4": {
"nates\TotalAuth\": "src"
}
},
"autoload-dev": {
"psr-4": {
// "ADmad\JwtAuth\Test\": "tests"
}`
Комментарии:
1. Что в вашей
composer.json
автозагрузке?2. @ccKep Спасибо, что взглянули на это. Я обновил вопрос как с помощью моего приложения / composer.json, так и с помощью моего плагина / composer.json, поскольку я не знал, какой из них вы хотели увидеть
3. @ccKep Я поиграл с плагином ADmad / cakephp-jwt-auth (тот, который загружается правильно), и я смог прервать его загрузку и исправить это снова. Это привело меня к выводу, что моего плагина (nates / TotalAuth) нет в списке autoload_static.php файл, пока ADmad есть. Может быть, поэтому PHP не распознает мой класс? Должен ли я вообще редактировать это autoload_static.php напрямую в файл?
4. Вам не следует редактировать этот файл напрямую, он создается
composer dump-autoload
— поэтому запустите эту команду.
Ответ №1:
Стандарт автоматической загрузки PSR-4 требует, чтобы пространство имен соответствовало файловой структуре с учетом регистра. Вы определяете свое пространство имен в composer.json
с заглавными natesTotalAuth
буквами, но в вашем классе как natestotalauth...
.
Убедитесь, что все оболочки совпадают, а оболочки соответствуют файловой структуре.
Комментарии:
1. Извините, это была проблема, когда я вводил его в SO. Все оболочки совпадают
2. Я поиграл с плагином ADmad / cakephp-jwt-auth (тот, который загружается правильно), и я смог прервать его загрузку и исправить это снова. Это привело меня к выводу, что моего плагина (nates / TotalAuth) нет в списке autoload_static.php файл, пока ADmad есть. Может быть, именно поэтому PHP не распознает мой класс? Должен ли я вообще редактировать это autoload_static.php подать напрямую?