Yii2 Dynamic URL Routing Rules

后端 未结 2 1428
广开言路
广开言路 2020-12-17 05:22

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

相关标签:
2条回答
  • 2020-12-17 06:08

    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 
    ],
    
    0 讨论(0)
  • 2020-12-17 06:10

    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]];
    
    0 讨论(0)
提交回复
热议问题