Custom url правильно ли делаю?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Custom url правильно ли делаю?

Сообщение louisvuitton »

Чтобы не свернуть не туда, хотелось бы сразу уточнить у знающих :?:

У меня есть модуль для страниц page
В модуле контроллер page и действие view для показа страницы (gii)

По умолчанию страницы показывались по таким url:

http://domain/page/page/view/1 (Где 1 это ID страницы)


Мне надо показывать страницы по адресам вида:

http://domain/page/href... (Где href... это одно из свойств модели Page)

Почитав доку, я написал класс

Код: Выделить всё

namespace app\components\urlrules;

use yii\web\UrlRuleInterface;
use app\modules\page\models\Page;

class PageUrlRule implements UrlRuleInterface {
    
     public function parseRequest($manager, $request) {
         $pathInfo = $request->pathInfo;
         if (preg_match('%^page(/(\w+))?$%', $pathInfo, $matches)) {
             $mbHref = $matches[2];
         }
         $page = Page::findOne(['href' => $mbHref]);
         if(!$page) 
             return false;
         else
             $route = 'page/page/view';
             $params = ['id' => $page->id];
             return [$route, $params];
             
     }
    
     public function createUrl($manager, $route, $params) {
         if($route != 'page/page/view' || !array_key_exists('id', $params))
              return false;
          
          $page = Page::findOne($params['id']);
          if(!$page)
              return false;
          else
              return 'page/' . "{$page->href}";
     }
 
}
 
и в rules добавил правило
[ 'class' => 'app\components\urlrules\PageUrlRule' ],

Вроде заработало, но как теперь генерировать ссылки?

Url::to(['page/page/view', ['id' => page->id]]);
выдает Unable to resolve the relative route: page/page/view. No active controller is available.

Работает только простой строкой $url = Url::to('page/' . $page->href); но это разве правильно?
И так ли вообще я все делаю?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Custom url правильно ли делаю?

Сообщение maleks »

Код: Выделить всё

Url::to(['/page/page/view', ['id' => page->id]]);  
?
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Custom url правильно ли делаю?

Сообщение louisvuitton »

так генерирует
http://domain/page/page/view?1[id]=2 где 2 это $page->id :|
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Custom url правильно ли делаю?

Сообщение louisvuitton »

Url::to(['/page/page/view', 'id' => $page->id]);

Вот так оказалось норм!)

А подход вообще правильный, или можно было как-то обойтись простым правилом? передавать в параметре например href вместо id и в action искать модель не по id а по уникальному href?

И теперь на каждый такой случай нужно будет писать такой класс с двумя этими методами?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Custom url правильно ли делаю?

Сообщение maleks »

Вам можно без своего класса, а использовать паттерн для стандартного т.к. у вас есть соответствие domain/page/href
Погуглите на тему - yii slug чпу
Ответить