Здравствуйте. Суть вопроса в следующем. У меня есть таблица: content с полями id, name, slug. В таблице собираюсь хранить динамически созданные страницы. В поле slug храню адрес страницы.
Установлен чистый Yii2. В config/web.php указал:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'/' => 'page/index',
['class' => 'app\components\CarUrlRule', 'connectionID' => 'db'],
],
]
В контроллере PageController:
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\helpers\Url;
class ModuleController extends Controller
{
public function actionIndex()
{
return $this->render('index');
}
}
Сделал файл app/components/CarUrlRule.php
namespace app\components;
use yii\web\UrlRule;
class CarUrlRule extends UrlRule
{
public $connectionID = 'db';
public function init()
{
if ($this->name === null) {
$this->name = __CLASS__;
}
}
public function createUrl($manager, $route, $params)
{
if ($route === 'page/index') {
if (isset($params['manufacturer'], $params['model'])) {
return $params['manufacturer'] . '/' . $params['model'];
} elseif (isset($params['manufacturer'])) {
return $params['manufacturer'];
}
}
return false; // это правило не подходит
}
public function parseRequest($manager, $request)
{
$pathInfo = $request->getPathInfo();
if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches)) {
// check $matches[1] and $matches[3] to see
// if they match a manufacturer and a model in the database
// If so, set $params['manufacturer'] and/or $params['model']
// and return ['car/index', $params]
}
return false; // это правило не подходит
}
Как сделать так, чтобы при открытии адрес-сайта.ru/название страницы из базы данных брался адрес страницы из slug и открывался? Например,
адрес-сайта.ru/about
адрес-сайта.ru/contact
адрес-сайта.ru/qwerty
По инструкции использование своего класса
https://yiiframework.com.ua/ru/doc/guide/topics.url/ читал но не очень понял. Много гуглил, но примеры те же самые.
Вопрос:
1) Как сделать, чтобы открывалась страница из базы?
2) Что нужно прописать в контроллере?
3) Что еще нужно прописать в файле CarUrlRule.php?