@boss-feeeddd

Как сформировать адрес Yii2 createUrl?

Здравствуйте. Суть вопроса в следующем. У меня есть таблица: 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?
  • Вопрос задан
  • 937 просмотров
Решения вопроса 1
@matperez
Вам, в принципе, достаточно одного правила в конфиге:
[
    '<slug:[\w\/-]+>' => '/page/view',
]


В действии PageController::viewAction() получайте параметр slug, по нему из базы доставайте страницу и показывайте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы