1

createUrlメソッドを拡張して上書きし、きれいなURLを作成しています。

スニペットは次のとおりです。

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);
        }
}

ここでは多くのことはそれほど重要ではありません。そして、関係のない部分を削除しました。

正常に動作します。ただし、アンカータグや、URLの最後に配置するGETパラメータなどの追加パラメータを使用してメソッドが呼び出される場合があります。

私の方法を使用すると、これらのパラメーターは失われます。それらを新しいURLで転送するには、元のcreateUrlメソッドが手動で行ったことをすべてやり直す必要がありますか?または、適切なメソッドにジョブを渡すための優れたオブジェクト指向の方法はありますか?

4

1 に答える 1

0

あなたは必要なすべての議論をしました-それは意図的ですか?

CApplicationのcreateUrlを使用して、Yiiにパラメータ文字列を作成させることができます。例:

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);
        }
}
于 2013-01-01T20:00:42.113 に答える