I want to set Dynamic Routing
for url in Cms pages in yii2.
When i add Cms page i will add page alias aboutus,faq,management etc , these alias will saved in db
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]];