2013-01-01 67 views
1

我正在擴展並覆蓋createUrl方法來製作漂亮的URL。Yii覆蓋createUrl,但保留參數

這裏是一個片段:

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方法手動執行的任何操作?還是有一個很好的面向對象的方式將工作傳遞給一個合格的方法?

回答

0

你已經提出了每個要求 - 是故意的嗎?

您可以通過Yii中使用createUrl從CApplication構建參數字符串,例如:

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

謝謝但是這不是我想要的目的。如果需要,原始的createUrl方法會在URL末尾添加參數和錨點標記。問題是,當我返回一個手動編寫的URL(返回小部件...)時,它不會將這些添加到URL末尾 –

+0

@nute更新以解決您的評論 – ernie