Роутинг внутри контроллера

В контроллерах, роутинг организовывается  по откликам на части 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 маршрута:

  1. /users/save/ - Сохранение пользователя
  2. /users/list/ - Список пользователей
  3. /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');

    }

}