Неустранимая ошибка PHP: необработанная ошибка: класс, но класс импортирован PHPStorm ⇐ Php
-
Anonymous
Неустранимая ошибка PHP: необработанная ошибка: класс, но класс импортирован PHPStorm
Внутри класса TableauDeBord.php я использую другой класс BaseDeDonee.php в качестве BDD, когда я вызываю функцию, она сообщает мне, что класс не найден, но я уверен, что импортировал его правильно, я использую автозагрузчик, здесь это конфигурация:
Функция TableauDeBord, вызвавшая ошибку
публичная статическая функция creerSalle():void { BDD::resetScore(); BDD::miseAJourDuCodeJeu(self::generateurNomAleatoire(4)); $_SESSION['creerSalleReponse'] = 'Исправление кода голоса: '; заголовок('Местоположение: /tableau-de-bord'); } Что находится в начале файла TableauDeBord.php пространство имен app\controllers; используйте app\views\TableauDeBord как tableauDeBordView; используйте config\BaseDeDonnee как BDD; Что находится в начале файла BaseDeDonnee.php конфигурация пространства имен; Структура: /корень /приложение /контроллеры /TableauDeBord.php /Логин.php [другие файлы] /[другие каталоги] /конфигурация /BaseDeDonnee.php [другие файлы] /[другие каталоги] /продавец /autoload.php /композитор /[сгенерированные файлы] /composer.json Примечания: [*]Класс Login.php также использует класс BaseDeDonnee.php, при входе в систему я вызываю некоторые функции, и они работают (Login.php и TableauDeBord.php используют одно и то же пространство имен).
[*]
Когда я перезапустил поиск решения самостоятельно, я зарегистрировался (это сработало), он перенаправил меня на TableauDeBord.php, но в конце вызвал функцию, которая вызывала ошибку, в функции, на которую он перенаправляется. та же страница (заголовок («Местоположение: /tableau-de-bord»)), поэтому она продолжалась бесконечно на одной и той же странице, и у меня была ошибка, отображаемая браузером, когда я увидел это, я удалил вызов функции, чтобы увидеть фактическое tableau-de-bord и увидел, что функция «public static function creerSalle():void» работает правильно (она должна изменить данные в базе данных, и она фактически изменила их). Функция вызывается при нажатии кнопки с использованием метода POST с isset($_POST['ButtonName']).
[*]
Я попробовал использовать class_exist('config\BaseDeDonnee') в Login.php и TableauDeBord.php, он сообщает мне, что класс не существует.
[*]
Я видел, что это, возможно, проблема с композитором, но поскольку Login.php "работает правильно" (по крайней мере, кажется), я не думаю, что это связано с этим, но вот код: { "требовать": { "ext-pdo": "*" }, "автозагрузка": { "пср-4": { "приложение\\": "приложение/", "config\\": "config/" } } } [*]Я видел карту классов, я видел файл с именем autoload_classmap в vender/composer и предполагаю, что он работает правильно, поскольку был создан. Наконец, вот точная ошибка на случай, если это поможет.
/bin/php /home/mat/PhpstormProjects/JeuEnLigneSpartiate/app/controllers/TableauDeBord.php Неустранимая ошибка PHP: необнаруженная ошибка: класс «config\BaseDeDonnee» не найден в /home/mat/PhpstormProjects/JeuEnLigneSpartiate/app/controllers/TableauDeBord.php:30 Трассировки стека: #0 /home/mat/PhpstormProjects/JeuEnLigneSpartiate/app/controllers/TableauDeBord.php(37): app\controllers\TableauDeBord::creerSalle() №1 {основной} добавленный в /home/mat/PhpstormProjects/JeuEnLigneSpartiate/app/controllers/TableauDeBord.php в строке 30 Процесс завершен с кодом выхода 255 Спасибо за любую помощь, я продолжу поиск на своей стороне и буду внимательно следить за вашим ответом.
Изменить
Я решил проблему, добавив:
требуется __DIR__ . '/../../vendor/autoload.php'; в начале TableauDeBord.php
Если кто-нибудь знает, почему автозагрузчик не загружается правильно повсюду, я хотел бы получить ответ, который поможет мне понять, что я сделал неправильно и как я могу улучшить свой код.
Внутри класса TableauDeBord.php я использую другой класс BaseDeDonee.php в качестве BDD, когда я вызываю функцию, она сообщает мне, что класс не найден, но я уверен, что импортировал его правильно, я использую автозагрузчик, здесь это конфигурация:
Функция TableauDeBord, вызвавшая ошибку
публичная статическая функция creerSalle():void { BDD::resetScore(); BDD::miseAJourDuCodeJeu(self::generateurNomAleatoire(4)); $_SESSION['creerSalleReponse'] = 'Исправление кода голоса: '; заголовок('Местоположение: /tableau-de-bord'); } Что находится в начале файла TableauDeBord.php пространство имен app\controllers; используйте app\views\TableauDeBord как tableauDeBordView; используйте config\BaseDeDonnee как BDD; Что находится в начале файла BaseDeDonnee.php конфигурация пространства имен; Структура: /корень /приложение /контроллеры /TableauDeBord.php /Логин.php [другие файлы] /[другие каталоги] /конфигурация /BaseDeDonnee.php [другие файлы] /[другие каталоги] /продавец /autoload.php /композитор /[сгенерированные файлы] /composer.json Примечания: [*]Класс Login.php также использует класс BaseDeDonnee.php, при входе в систему я вызываю некоторые функции, и они работают (Login.php и TableauDeBord.php используют одно и то же пространство имен).
[*]
Когда я перезапустил поиск решения самостоятельно, я зарегистрировался (это сработало), он перенаправил меня на TableauDeBord.php, но в конце вызвал функцию, которая вызывала ошибку, в функции, на которую он перенаправляется. та же страница (заголовок («Местоположение: /tableau-de-bord»)), поэтому она продолжалась бесконечно на одной и той же странице, и у меня была ошибка, отображаемая браузером, когда я увидел это, я удалил вызов функции, чтобы увидеть фактическое tableau-de-bord и увидел, что функция «public static function creerSalle():void» работает правильно (она должна изменить данные в базе данных, и она фактически изменила их). Функция вызывается при нажатии кнопки с использованием метода POST с isset($_POST['ButtonName']).
[*]
Я попробовал использовать class_exist('config\BaseDeDonnee') в Login.php и TableauDeBord.php, он сообщает мне, что класс не существует.
[*]
Я видел, что это, возможно, проблема с композитором, но поскольку Login.php "работает правильно" (по крайней мере, кажется), я не думаю, что это связано с этим, но вот код: { "требовать": { "ext-pdo": "*" }, "автозагрузка": { "пср-4": { "приложение\\": "приложение/", "config\\": "config/" } } } [*]Я видел карту классов, я видел файл с именем autoload_classmap в vender/composer и предполагаю, что он работает правильно, поскольку был создан. Наконец, вот точная ошибка на случай, если это поможет.
/bin/php /home/mat/PhpstormProjects/JeuEnLigneSpartiate/app/controllers/TableauDeBord.php Неустранимая ошибка PHP: необнаруженная ошибка: класс «config\BaseDeDonnee» не найден в /home/mat/PhpstormProjects/JeuEnLigneSpartiate/app/controllers/TableauDeBord.php:30 Трассировки стека: #0 /home/mat/PhpstormProjects/JeuEnLigneSpartiate/app/controllers/TableauDeBord.php(37): app\controllers\TableauDeBord::creerSalle() №1 {основной} добавленный в /home/mat/PhpstormProjects/JeuEnLigneSpartiate/app/controllers/TableauDeBord.php в строке 30 Процесс завершен с кодом выхода 255 Спасибо за любую помощь, я продолжу поиск на своей стороне и буду внимательно следить за вашим ответом.
Изменить
Я решил проблему, добавив:
требуется __DIR__ . '/../../vendor/autoload.php'; в начале TableauDeBord.php
Если кто-нибудь знает, почему автозагрузчик не загружается правильно повсюду, я хотел бы получить ответ, который поможет мне понять, что я сделал неправильно и как я могу улучшить свой код.
Мобильная версия