Роутинг внутри контроллера
В контроллерах, роутинг организовывается по откликам на части url. Система разбивает url на части и работает с каждой частью по отдельности для обеспечения откликов.
Отклик на часть url (номер слеша после которого брать данные)
Для того, чтобы раздел мог принимать вложенные маршруты, необходимо в админ-панели настроить обработку маршрута.
Откройте раздел с структуре:
Перейдите во вкладку параметры:После данных настроек, раздел и контроллер готов к обработке вложенных маршрутов.
Пример вложенного маршрута /news/1/
Текущий url: /contacts
if (Pr::url(1) == 'contacts') {
/*
* условие отработает, так как первая часть url равна contacts
*/
}
Текущий url: /catalog/prices/
if (Pr::url(2) != 'prices') {
/*
* условие не выполнится
*/
}
Текущий url: / (главная страница)
if (!Pr::url(1)) {
/*
* условие выполнится, так как на главной странице отсутствует первая часть url
*/
}
Весь url: /news/ (новости)
if (Pr::url() == '/news/') {
/*
* условие выполнится, так как url == /news/
*/
}
Пример реализации "боевого" роутинга в контроллере
К примеру, в приложении создан раздел /users/ и к нему привязан контроллер UsersController
Нужно реазизовать 3 маршрута:
- /users/save/ - Сохранение пользователя
- /users/list/ - Список пользователей
- /users/profile/2 - Профиль пользователя с передаваемым id
Каждый маршрут должен вызывать метод, который будет реализовать локальный функционал и подключать свой шаблон.
Создадим контроллер
final class UsersController extends PrController {
public function index(){
}
}
Создадим методы
final class UsersController extends PrController {
public function index(){
}
public function usersSave(){
}
public function usersList(){
}
public function userProfile(){
}
}
Инициализация методов
После того, как методы созданы, их нужно инициализировать. Будем использовать метод init()
final class UsersController extends PrController {
public function index(){
$this -> init([
'userSave',
'usersList',
'userProfile',
]);
}
public function usersSave(){
}
public function usersList(){
}
public function userProfile(){
}
}
Создание отклика на маршрут в каждом методе
final class UsersController extends PrController {
public function index(){
$this -> init([
'userSave',
'usersList',
'userProfile',
]);
}
public function usersSave(){
if(Pr::url(2) != 'save'){
return false;
}
/*
CODE
*/
$this -> display('/Project/views/pages/users/save');
}
public function usersList(){
if(Pr::url(2) != 'list'){
return false;
}
/*
CODE
*/
$this -> display('/Project/views/pages/users/list');
}
public function userProfile(){
if(Pr::url(2) != 'profile'){
return false;
}
$userId = Pr::url(3);
/*
CODE
*/
$this -> display('/Project/views/pages/users/profile');
}
}