Правила роутинга url в yii2.
  • 1050

Роутинг в yii2. Шаблоны url и маршруты.

Автор: admin | 19 июня (Вт.) 2018г. в 22ч.02м.

В этой статье рассмотрим наиболее "ходовые" шаблоны маршрутов.
Для начала включим ЧПУ в настройках сайта в файле config.php (main.php):
<?php
use \yii\web\Request;
//если шаблон advenced
$baseUrl = str_replace('/frontend/web', '', (new Request)->getBaseUrl());

//Если basic шаблон
$baseUrl = str_replace('/web', '', (new Request)->getBaseUrl());

'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'baseUrl' => $baseUrl,
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'enableStrictParsing' => true,
            'rules' => [
                  //тут будут правила роутинга
            ]
],
'request' => [
            //code
            'baseUrl' => $baseUrl,
            //code
        ],        ​

Также файл .htaccess должен быть правильно насторен. 

Теперь приступим к рассмотрению шаблонов.

Что представляет из себя правило роутинга. Каждое правило, это отдельный элемент массива.

Левая часть(ключ) - это шаблон строки запроса, а правая часть (значение) - контроллер и его экшэн:
'шаблон' => 'контроллер/экшэн'.
//Cоответствует your-domain.com или your-domain.com/ в url.
//Вызывает контроллер SiteController и actionIndex()    
'/' => 'site/index',  
 
 

//Url: your-domain.com/controller/action
//Вызывает любой контроллер и его любой экшен.        
'<controller:\w+>/<action:\w+>' => '<controller>/<action>', 
  


//Url: your-domain.com/news/category/categoty-name
//Вызывает контроллер NewsController и actionCategory($alias)        
'news/category/<alias:[\w_-]+>' => 'news/category', 
    
   
 
//Url: your-domain.com/news/category/234
//Вызывает контроллер NewsController и actionCategory($id)        
'news/category/<id::\d+>' => 'news/category',   
  

      
//Для постраничной навигации:
//Url: your-domain.com/news/category/categoty-name/12
//Вызывает контроллер NewsController и actionCategory($alias, $pageNum)    
'news/category/<alias:[\w_-]+>/<pageNum:\d+>' => 'news/category',
 


//Для карты сайта:
//Url: your-domain.com/sitemap.xml
//Вызывает контроллер SitemapController и actionIndex()     
'sitemap.xml' => 'sitemap/index',  
 


//Для авторизации на сайте:
//Url: 
//    your-domain.com/login
//    your-domain.com/logout
//    your-domain.com/signup    
//Вызывает контроллер SitemapController и actionLogin() или actionLogout() или actionSignup()      
'<action:(login|logout|signup)>' => 'site/<action>'



//Url: your-domain.com/articles или your-domain.com/tags
//Вызывает контроллер ArticleController или TagController и у них actionIndex()        
'<controller:(article|tag)>s' => '<controller>/index',
 


//Url: your-domain.com/2018/04/02
//Вызывает контроллер BlogController и actionIndex()         
'posts/<year:\d{4}>/<month:\d{2}>/<day:\d{2}>' => 'blog/index'   



//Url: your-domain.com/employee/renewOffer/24,54,47;some-title
//Вызывает контроллер CompanyController и actionRenewOffer()         
'employee/renewOffer/<id_offer:[\d,]+>;<title:.+>' => 'company/renew-offer'



//Url: your-domain.com/news/category/234page/type/eny-data
//Вызывает контроллер NewsController и actionCategory($args) 
'news/category/<args:.*?>' => 'news/category',​

При написании правил важно не забывать, что правила с более узким охватом url должны быть
выше, чем более обопщенные правила.

Приветствую!

Меня зовут Сергей. Я - автор этого блога.

Если Вам был полезен материал на моем сайте, поддержите пожалуйста мой проект, чтобы о нем узнали другие люди - кликните plizz :) на иконку в соц. сети, чтобы поделиться материалом с другими.