php – 根据参数值Yii重写路由

我在Yii中有几个规则允许我重写一些路由,其中​​每个路由都将作为get参数传递给动作.

'<department>' => 'products/index','<department>/<category>' => 'products/index',

我想明确地写一个规则,根据参数值将URL更改为我想要的任何内容

例如,我现在有这样的URL
www.mysite.com/Books和Pencils因为这个规则’< department>‘而被重写=> ‘产品/索引’,这没关系

我想将该URL更改为www.mysite.com/books-pencils,如果有人知道如何编写比较deparment属性值的规则,然后将其重写为我想要的任何值.

谢谢

解决方法

您可以使用自定义类来处理特殊请求.
我使用过这样的方法,从数据库中获取自定义URL:

'urlManager'=>array(
            'rules'=>array(
                array(
                    'class' => 'application.components.UrlRule',),

然后你创建类似于这样的custo类:

<?php

Yii::import("CBaseRule");

class UrlRule extends CBaseUrlRule
{
    public function createUrl($manager,$route,$params,$ampersand)
    {
        // check for my special case of URL route,if not found,then return the unchaged route
        preg_match("/^(.+)\/(.+)$/",$r);
        if(!is_array($r) or !isset($r[1]) or !isset($r[2])) {
            return $route;
        }

        // handle your own route request,and create your url
        $url = 'my-own-url/some-thing';

        // check for any params,which i also want to add
        $urlParams = $manager->createPathInfo($params,"=","&");

        $return = trim($url,'/');
        $return.= $urlParams ? "?" . $urlParams : "";

        return $return;
    }

    public function parseUrl($manager,$request,$pathInfo,$rawPathInfo)
    {

        // handle my special url request
        $controller = '....';
        $action = '.....';

        // return the controller/action that should be used     
        return lcfirst($controller)."/".$action;
    }
}

我不知道这是否是您想要的,但至少在本课程中,您可以使用所请求的URL完成所需的一切.
如果你愿意,想用301重定向到1个URL重定向很多类似的URL,你可以在parseUrl函数中想到这样的事情

// check my route and params,and if I need to redirect
$request->redirect('/your/new/url/?params=bla',true,'301');

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...