Yii2 Dynamic URL Routing Rules

◇◆丶佛笑我妖孽 提交于 2019-11-29 05:12:52

You can edit you routing rules during bootstrapping process.

First create bootstrapping class by implementing yii\base\BootstrapInterface

Under Your components directory create a file called DynaRoute.php

<?php

 namespace app\components;

 use Yii;
 use yii\base\BootstrapInterface;
 use app\models\Cms;  // assuming Cms is the Model class for table containing aliases
 class DynaRoute implements BootstrapInterface
 {
     public function bootstrap($app)
     {

        $cmsModel = Cms::find()
            ->all(); // customize the query according to your need
        routeArray = [];
        foeach($cmsModel as $row) { // looping through each cms table row
            $routeArray[$row->alias] = 'YOUR_ORIGINAL_URL'; // Adding rules to array on by one
        }
        $app->urlManager->addRules($routeArray);// Append new rules to original rules
}     

}

Now in your configuration file (web.php in config folder) in $config array add above class under bootstrap option

'bootstrap' => [
    .... // other bootstrap options 
    'app\components\DynaRoute', // add this line 
],

In addition to ck_arjun's answer, you can pass parameter to route as an ID. For example, if you want redirect "/aboutus" to "/site/page/id/2".

Replace:

$routeArray[$row->alias] = 'YOUR_ORIGINAL_URL'

in

$routeArray[] = ['class' => 'yii\web\UrlRule', 'pattern' => $row->alias, 'route' => $row->route, 'defaults' => ['id' => $row->id]];
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!