HLEB2 FAQ: Какие бывают ошибки при начальном использовании фреймворка? Вопрос

29 Мая

Перечень возможных ошибок при установке и первом использовании фреймворка:

При первом запуске веб-сервер не отображает демонстрационную страницу.

Проблема может быть в том, что веб-сервер направлен не в публичную папку проекта, а в корневую или в другое место. Также это может указывать на неправильную настройку веб-сервера.

HL01_ERROR Не удалось сохранить кэш! Ошибка при записи файла в папку /storage/. Необходимо расширить права веб-сервера для этой папки и вложений

Как видно из текста ошибки нужно установить права на папку /storage/ проекта. Если вы направили в папку другой веб-сервер, то есть также вероятность, что первый создал там файлы кеша под правами, у которых нет доступа для текущего. Настройка прав доступа в документации.

HL02_ERROR Ошибка составления маршрутов. Не совпадает количество открытых и закрытых тегов групп в маршрутах

Каждая группа должна быть завершена одним тегом endGroup(). При использовании альтернативного синтаксиса групп такой ошибки не появится. Группировка маршрутов в документации.

HL03_ERROR Ошибка составления маршрутов. Не обнаружен завершающий тег endGroup для группы маршрутов

Аналогично как в предыдущей ошибке каждая группа должна быть завершена одним тегом endGroup().

HL04_ERROR Ошибка составления маршрутов. В методе %method%() контент уже передан как второй параметр, поэтому контроллер недействителен

При добавлении контроллера в маршрутах может возникнуть такая ошибка. Например, если вы указали view() функцию с шаблоном и одновременно контроллер - произойдет конфликт, так как нельзя определить что именно нужно выводить. Можно четырьмя правильными способами указать выводимые данные:

// Вариант 1. Вывод простого текста.
Route::get('/path/', 'Text');
// Вариант 2. Из указанного шаблона.
.Route::get('/path/', view('default'));
// Вариант 3. С назначением контроллера.
Route::get('/path/')->controller(DefaultController::class);
// Вариант 4. С назначением модуля.
Route::get('/path/')->module('default', ExampleModuleController::class);

HL05_ERROR Ошибка составления маршрутов. Ключи метода where() могут быть только строковыми и соответствовать подставляемому значению в маршруте

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

HL06_ERROR Ошибка составления маршрутов. В методе where() одного маршрута ключи не должны повторятся и должны соответствовать заменяемым значениям

Как указано в тексте ошибки - ключи условий where() должны соответствовать заменяемым частям адреса. Например:

   Route::get('/parts/{first}/{second}/{third}', 'Text')->where(['first' => '[0-9]+', 'second' => '[a-z]+']);

Здесь динамические части адреса под названием 'first' и 'second' снабжены соответствующими условиями, а для 'third' не указано соответствия. Проверяются таким образом только две части, первая может содержать только цифры, вторая только латинские буквы в нижнем регистре.

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

Используйте регулярные выражения в where() стандартного вида, например в формате /[a-z]+/i или [a-zA-Z]+.

HL08_ERROR Ошибка составления маршрутов. Количество открытых и закрытых символов { и } должно совпадать для валидной вставки динамического значения

Пример из документации (динамические значения заключены в фигурные скобки):

Route::get('/resource/{version}/{page}/', 'Dynamic address used');

HL09_ERROR Ошибка составления маршрутов. Некорректное положение символов { и } для правильной вставки динамического значения

Проверьте, что теги динамических значений правильно заключены в фигурные скобки. См. предыдущий пример.

HL10_ERROR Ошибка составления маршрутов. Некорректное положение символа ? для обозначения динамического окончания адреса

В адресе маршрута можно указать, что его последняя часть (и только последняя) может отсутствовать: Примеры из документации (обратите внимание на правильное положение символа ?):

Route::get('/profile/user/{id?}/', 'Variable ID value');

Route::get('/contacts/form?/', 'Optional end part');

HL11_ERROR Ошибка составления маршрутов. Количество контроллеров у маршрута %method%() не может быть больше одного

Как видно из описания ошибки - в одном маршруте может быть только один контроллер (или модуль).

HL12_ERROR Ошибка составления маршрутов. Не назначен контент для метода %method%(). Он может быть назначен при помощи контроллера или в самом методе вторым аргументом

В текущем состоянии маршрут не завершён, так как действие при его совпадении не назначено.

HL13_ERROR Ошибка составления маршрутов. Тип HTTP-метода не поддерживается или указан неправильно, доступны: %types%

Фреймворк по умолчанию поддерживает определённый набор HTTP-методов. Это 'GET', 'POST', 'DELETE', 'PUT', 'PATCH', 'OPTIONS', и 'HEAD'. Набор можно дополнить. Поэтому при указании не поддерживаемого метода в маршруте может появится такая ошибка.

HL14_ERROR Ошибка составления маршрутов. При назначении HTTP-методов в fallback() они не должны повторяться в различных применениях fallback()

Если вы используете fallback, то можно назначить только одно отношение к конкретному HTTP-методу.

HL15_ERROR Отсутствует назначенный класс по пути: %path%.

Перед созданием кеша для маршрутов фреймворк дополнительно проверяет существование указанных в них классов контроллеров.

HL16_ERROR Ошибка составления маршрутов. Отсутствует назначенный шаблон для метода %method%() по пути: %path%

Перед созданием кеша для маршрутов фреймворк проверяет существование файлов для указанных в них шаблонов.

HL17_ERROR Ошибка составления маршрутов. Недопустимое сочетание символов (две точки подряд) в адресе маршрута. Если это вариативный маршрут, используйте троеточие в начале условия последней его части

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

HL18_ERROR Ошибка составления маршрутов. Использование одновременно динамического /{example?}/ и вариативного типа /...number/ в одном маршруте не допускается

Ошибка указывает на то, что нельзя задать динамическую часть в маршруте в котором уже используется вариативное назначение таких частей.

HL19_ERROR Ошибка составления маршрутов. Неправильно расположен вариативный маршрут или передан в неправильном формате. Он должен находиться в конечной части маршрута и назначаться один раз

Неправильное использование вариативного маршрута. Правильный пример из документации:

 Route::get('/example/...0-5/', 'From 0 to 5 arbitrary parts');

HL20_ERROR Ошибка составления маршрутов. Название name() %name% для %method%() маршрута должно быть установлено один раз и содержать только латинские символы и цифры в любом регистре. Возможно еще наличие тире и точки

Напоминание о том, что имя маршруту можно задать только один раз и оно должно соответствовать определённому формату.

HL21_ERROR Ошибка составления маршрутов. Класс контроллера %class% или вызываемый метод %method% в нём не обнаружен

Фреймворк при составлении кеша маршрутов дополнительно проверяет не только наличие классов контроллеров, но и назначенные вызываемые методы в них. Если эти методы не содержат в маршруте изменяемых частей.

HL22_ERROR Ошибка составления маршрутов. Для метода domain() неправильно задано название: %name%. Убедитесь, что значение в нижнем регистре

Указание на то, что домен нужно указывать только в нижнем регистре для правильной обработки в маршруте.

HL23_ERROR Ошибка составления маршрутов. Неправильно задано регулярное выражение %regexp% для метода domain()

Ошибка в регулярном выражении для задания маски доменам.

HL24_ERROR Ошибка составления маршрутов. Неправильно задан уровень для метода domain()

Для указания домена существуют уровни, они соотвествуют его частям и поддоменам. Параметр $level в методе domain($name, $level) отвечает за уровень домена. Сам домен обычно под уровнем 2. Схема: subdomain(3).domain(2).com(1) или subdomain(4).domain(3).net(2).com(1)

HL25_ERROR Ошибка составления маршрутов. В классе контроллера %class% вызываемый метод %method% следующие аргументы не соответствуют заданным: %cells%

Описание ошибки указывает на то, что аргументы в методе контроллера, которые должны соответствовать динамическим значениям из адреса маршрута, им не соответствуют. Контроллеры в документации

HL26_ERROR Ошибка составления маршрутов. В классе контроллера %class% вызываемый метод %method% неправильно заданы аргументы

Более общая ошибка, сходная с предыдущей.

HL27_ERROR Ошибка составления маршрутов. Название %name% маршрута не должно повторяться

Ещё одна ошибка связанная с названием маршрута. Она указывает, что название не должно быть использовано в другом маршруте.

HL28_ERROR Ошибка составления маршрутов. У маршрута может быть только одно имя

Это узкоспециальная ошибка, возникающая при назначении маршруту двух или более методов name(). Может быть одно или не быть вообще.

HL29_ERROR Ошибка составления маршрутов. Вместе с контроллером page() должен быть метод name()

Чтобы правильно сопоставить страницы по именам необходимо выполнить это условие.

HL30_ERROR Ошибка составления маршрутов. В контроллере page()должен быть корректный тип

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

HL31_ERROR Ошибка составления маршрута page() или не подключена библиотека phphleb/adminpan

Для того, чтобы использовать назначаемые страницы необходима специальная библиотека.

HL32_ERROR Ошибка составления маршрутов. Часть %part% адреса %route% должна быть полностью динамической: /{...}/ или /{...?}/

Дополнительная проверка на корректность синтаксиса адреса для динамического маршрута.

HL33_ERROR Ошибка составления маршрутов. Неправильно установлен тег @, он может быть только в начале части маршрута

Специальный тег @ может быть расположен только в начале. Пример из документации:

Route::get('/profile/@{username}', 'Username with tag');

HL34_ERROR Метод protect() маршрута не может быть использован совместно с методом plain()

plain() выводит простой текст/страницу без использования сессий и поэтому не подходит для метода protect(), в котором они используются.

HL35_ERROR Ошибка автозагрузчика классов. Не удалось найти класс контроллера : %class%

Отдельная ошибка, которая возникает не при кешировании маршрутов, а в последующих запросах. Несмотря на то, что при кешировании контроллер присутствовал, сейчас фреймворк не может его обнаружить.

HL36_ERROR Ошибка составления маршрутов. Название модуля (%name%) должно состоять из из латинских букв в нижнем регистре, цифр, дефиса и символа \'/\' и иметь возможность быть преобразованным в название класса

Требования к названию модулей для правильного сопоставления классов в проекте.

fomiash fomiash + 215
Опубликовано в PHP фреймворк HLEB
К сожалению, ответов пока нет


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.