У меня есть модуль для страниц 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}";
}
}
[ '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); но это разве правильно?
И так ли вообще я все делаю?