【问题标题】:Yii Overwrite createUrl but keep parametersYii 覆盖 createUrl 但保留参数
【发布时间】:2013-01-03 01:51:34
【问题描述】:

我正在扩展和覆盖 createUrl 方法以制作漂亮的 URL。

这是一个sn-p:

public function createUrl($manager, $route, $params, $ampersand) {
        if($route == 'widget/view'){
            $widget = Widget::model()->findByPk($params['id']);
            return 'widget/' . $params['id'] . '/' . SEOUrlRule::slug($widget->title);
        }
}

这里很多事情都无关紧要。我删除了不相关的部分。

它工作正常。但是,有时可能会使用附加参数(例如锚标记或 GET 参数)调用该方法以放在 URL 的末尾。

使用我的方法,这些参数会丢失。要在新 URL 中传递它们,我是否必须重新执行原始 createUrl 方法手动执行的操作?或者有没有一种很好的面向对象的方式来将工作传递给有能力的方法?

【问题讨论】:

    标签: php url-rewriting yii extend


    【解决方案1】:

    您已经提出了所有必要的论点 - 这是故意的吗?

    你可以让 Yii 使用 CApplication 中的 createUrl 来构造参数字符串,例如:

    public function createUrl($manager, $route, $params, $ampersand) { 
            if($route == 'widget/view'){
                $widget = Widget::model()->findByPk($params['id']);
                $url = 'widget/' . $params['id'] . '/' . SEOUrlRule::slug($widget->title);
                return Yii::app()->createUrl(trim($url,'/'),$params,$ampersand);
            }
    }
    

    【讨论】:

    • 谢谢,但这不是我想要达到的目标。如有必要,原始的 createUrl 方法会在 URL 的末尾添加参数和锚标记。问题是当我返回一个手动编写的 URL(返回小部件......)时,它不会在 URL 的末尾添加这些
    猜你喜欢
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多