0

如何在 yii 中重写硬编码的 url?

我做了一个网址如下,

CHtml::link($visit->health_institute_name, array('hospitals_single', 'id'=>$visit->health_institute_id));

它重定向到网址如下, http: //abc.com/hospital?name=yyy&id=14#ad-image-0 我只希望网址如下, http: //abc.com/yyy

即:我需要从网址中删除 hospital?name= 和 &id=14#ad-image-0 ...

任何人都可以帮忙吗?

4

2 回答 2

1

在您的 urlManager 规则中,在所有其他规则之后添加:

'<name>' => 'hospital/view',

假设view是您要调用的操作 - 将其替换为您的操作名称

然后你的链接如下:

CHtml::link($visit->health_institute_name, Yii::app()->getBaseUrl(true).'/'.$visit->name);
于 2013-10-10T11:17:28.230 回答
0

如果您想像http://abc.com/hospital/yyy一样使用户友好且对 seo 友好

你可以使用这个:

class CarUrlRule extends CBaseUrlRule
{
    public $connectionID = 'db';

    public function createUrl($manager,$route,$params,$ampersand)
    {
        if ($route==='car/index')
        {
            if (isset($params['manufacturer'], $params['model']))
                return $params['manufacturer'] . '/' . $params['model'];
            else if (isset($params['manufacturer']))
                return $params['manufacturer'];
        }
        return false;  // this rule does not apply
    }

    public function parseUrl($manager,$request,$pathInfo,$rawPathInfo)
    {
        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 $_GET['manufacturer'] and/or $_GET['model']
            // and return 'car/index'
        }
        return false;  // this rule does not apply
    }
}

那里有更多信息! http://www.yiiframework.com/doc/guide/1.1/fr/topics.url#using-custom-url-rule-classes

于 2013-10-10T23:47:15.713 回答