2013-11-20 60 views
0

我需要做的是延長getPageTitle()功能,使標題被翻譯和actioncontroller交換 這是我放在Controller.php這樣Yii的擴展控制器功能

private $_pageTitle; 
public function getPageTitle() 
{ 
    if($this->_pageTitle!==null) { 
      return Yii::t('wm', $this->_pageTitle); 
    } else { 
      $controller = Yii::t('wm', ucfirst(basename($this->getId()))); 

      if($this->getAction()!==null && strcasecmp($this->getAction()->getId(),$this->defaultAction)) { 
        $action = Yii::t('wm', ucfirst($this->getAction()->getId())); 
        return $this->_pageTitle=Yii::app()->name.' - '.Yii::t('wm', '{action} {controller}', array('{action}' => $action, '{controller}' => $controller)); 
      } else { 
        return $this->_pageTitle=Yii::app()->name.' - '.$controller; 
      } 
    } 
} 

功能參考從這裏開始:http://www.yiiframework.com/forum/index.php/topic/22258-internationalisationtranslation-of-page-title/

但如果在視圖中我設置一個新的自定義標題與這些

$this->pageTitle = 'Title'; 
    $this->setPageTitle('Title2'); 
    Yii::app()->getController()->pageTitle="Title3"; 
什麼

標題沒有得到改變

如果我檢查parent::getPageTitle(),它總是返回值

如果我檢查$this->_pageTitle它總是返回null

回答

0

我不認爲這是一個私人問題,因爲私有財產在這個類只引用。我認爲你已經假定當pageTitle被引用爲Controller屬性時,getPageTitle()將被調用。但是這可能只適用於模型/主動記錄。

如果外部代碼引用了propertyName,並且它不能公開訪問,則調用一個名爲get + PrivatePropertyName的函數,我不認爲它在Controller中是自動的。你必須編寫你自己的__get()存取器來自動調用這個函數。

(在你引用的鏈接中,我只看到了明確調用getter和setter的例子。)