В предыдущей части Планирование и Установка были разобраны темы "как всё это будет происходить" и по установке PHP микрофреймворка HLEB, на котором и будем разрабатывать демонстрационный сайт.
Маршрутизация
Маршрутизация фреймворка - это распределение запросов пользователей из частей URL по назначенным в ней контроллерам и шаблонам. Чтобы задать эти правила нужно изменить файл с роутами (или маршрутами, здесь в тексте не имеет принципиальной разницы).
Вам будет проще читать далее, если ознакомитесь с оригинальной инструкцией по маршрутизации в документации фреймворка.
В папке с установленным и работающим фреймворком откройте папку routes, если фреймворк только установлен, то там один файл main.php, осуществляющий роутинг. Правда, легко запомнить, /routes/main.php? Этот файл (и другие файлы в папке) довольно важный для проекта, в нем содержаться так называемые endpoints, точки входа для запросов пользователей, API и тд.
По сути здесь (в папке routes) реализована прямая и обратная связь с внешним миром, и структура маршрутизации планировалась так, чтобы по одному взгляду на файл маршрутизации можно было составить представление о самом проекте. Вернёмся к содержимому файла main.php. Подразумевается, что вы его открыли в своей любимой (или нелюбимой, если вас заставили) IDE и теперь ждёте продолжения.
Продолжение. Для создания страниц Home page (Главная страница), Contacts (Контакты), User (Страница пользователя) и Privacy Policy (Политика конфиденциальности) замените единственный маршрут в файле на следующий код:
use Phphleb\Hlogin\App\System\UserRegistration as RegType;
/*
В группе содержатся маршруты, которые видны всем пользователям, кроме заблокированных,
и по умолчанию выводятся кнопки базовой регистрации.
*/
Route::before('Hlogin\Registrar', [RegType::UNDEFINED_USER, '>='])->getGroup();
/* Home page (Главная страница) */
Route::get('/')->controller('PageController@home')->name('homepage');
/* Contacts (Контакты) */
Route::get('/contacts')->controller('PageController@contacts')->name('contacts');
/* User (Страница пользователя) */
Route::get('/user/{user_id}')->controller('PageController@user')->where(['user_id' => '[0-9]+'])->name('user');
Route::endGroup();
/* Privacy Policy (Политика конфиденциальности)) */
Route::get('/privacy-policy', view("privacy-policy"))->name('privacy.policy');
/* Like (Добавление лайка зарегистрированного пользователя) */
Route::protect()->post('/likes/add')->controller('AjaxController@userLike');
Теперь по очереди рассмотрим эти роуты:
Home page - главная страница. Направлено в контроллер PageController метод home. Информация о контроллерах будет в следующих статьях. HTTP-метод GET (по названию типа Route::get(...)).
Contacts - страница с контактами владельца сайта. Направлено в контроллер PageController метод contacts. HTTP-метод GET.
User - публичная страница с необходимой информацией о конкретном пользователе. . И сколько раз он лайкнул. Спокойно, шутка. Эта информация конфиденциальная. Заметьте, вторая часть запроса имеет вид {user_id}, в это место будет передаваться id пользователя, а во фреймворке мы его перехватим в контроллере по идентификатору "user_id". Также видно, что метод where проверяет значение с помощью регулярного выражения (вследствие можно только цифры). HTTP-метод GET.
Privacy Policy - страница с Политикой сайта, где как раз указывается, что пользователь дает разрешение использовать его данные и отображать количество его лайков. Не использует контроллер, напрямую выведен шаблон из /resources/views/privacy-policy.php. HTTP-метод GET.
Like - страница для выполнения AJAX-запроса. Обратите внимание, что она отличается от User, вместо Route::get использовано Route::post, соответственно, HTTP-метод POST.
Ещё обратите внимание на указание protect() в маршруте, это значит, что он будет защищён CSRF-токеном. Ещё использован другой контроллер - AjaxController, метод userLike. Этот роут имеет принципиально иное предназначение, поэтому он отделён в другой контроллер.
При создании сайта всегда разбивайте обращения к контроллерам по логическим группам, иначе, когда вы обратитесь в техподдержку с одним-единственным огромным контроллером, реализующем запросы к социальной сети, мы незамедлительно возьмем отпуск.
Также вы скорее всего заметили, что использованы ещё действия с названием name. Это в дальнейшем будет использовано в коде для получения адреса маршрута. Зачем это нужно? В фреймворке можно, в частности, задать окончание URL, поэтому лучше генерировать ссылку, чем ожидать редиректы. Да и так проще, меняется часть роута, не надо переписывать везде, так как он вызывается по имени.
И, собственно, про то, что встретилось первым в этом примере, это группа. В группу можно заключать маршруты и назначать им общее действие. Здесь добавлен контроллер-посредник Hlogin\Registrar (задаёт условия регистрации пользователей), код которого выполнится до назначенного в роуте. Границы группы обозначены Route::getGroup() и Route::endGroup(). К подключению регистрации вернёмся позднее.