Решение проблем

Эта страница поможет вам устранить общие проблемы, с которыми вы можете столкнуться при использовании Flight.

Общие проблемы

404 Страница не найдена или непредвиденное поведение маршрута

Если вы видите ошибку 404 Страница не найдена (но вы клянетесь своей жизнью, что она действительно там и это не опечатка), на самом деле это может быть проблема с возвращением значения в конечной точке маршрута вместо простого его вывода. Причина этого намеренная, но некоторым разработчикам это может ускользнуть.


Flight::route('/hello', function(){
    // Это может вызвать ошибку 404 Страница не найдена
    return 'Hello World';
});

// Что вам, вероятно, нужно
Flight::route('/hello', function(){
    echo 'Hello World';
});

Причина заключается в том, что в маршрутизаторе встроен специальный механизм, который обрабатывает возвращаемый вывод как инструкцию "перейти к следующему маршруту". Вы можете ознакомиться с этим поведением в разделе Маршрутизация.

Класс не найден (автозагрузка не работает)

Могут быть несколько причин, почему это происходит. Ниже приведены некоторые примеры, но убедитесь также, что вы изучили раздел автозагрузка.

Некорректное имя файла

Самая распространенная причина в том, что имя класса не совпадает с именем файла.

Если у вас есть класс с именем MyClass, то файл должен иметь имя MyClass.php. Если у вас есть класс с именем MyClass и файл назван myclass.php, то автозагрузчик не сможет его найти.

Некорректное пространство имен

Если вы используете пространства имен, то пространство имен должно соответствовать структуре каталогов.

// код

// если ваш MyController находится в каталоге app/controllers и у него есть пространство имен
// это не сработает.
Flight::route('/hello', 'MyController->hello');

// вам нужно выбрать один из этих вариантов
Flight::route('/hello', 'app\controllers\MyController->hello');
// или если у вас есть оператор use вверху

use app\controllers\MyController;

Flight::route('/hello', [ MyController::class, 'hello' ]);
// также можно написать
Flight::route('/hello', MyController::class.'->hello');
// или так...
Flight::route('/hello', [ 'app\controllers\MyController', 'hello' ]);

path() не определен

В контрольном приложении это определяется внутри файла config.php, но для того чтобы ваши классы были найдены, убедитесь, что метод path() определен (вероятно, к корневому каталогу вашего каталога) прежде чем пытаться его использовать.


// Добавьте путь к автозагрузчику
Flight::path(__DIR__.'/../');