簡體   English   中英

Yii擴展Controller功能

[英]Yii extending the Controller function

我需要做的是擴展getPageTitle()函數,以便翻譯標題並交換actioncontroller這是我放置在Controller.php中的函數

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

private變量只能在創建它們的類(在您的情況下為Controller

您應該改用protected因為這些變量在從聲明它的類繼承的所有類中也可以訪問。

有關更多信息: https : //stackoverflow.com/a/4361582/428543http://php.net/manual/zh/language.oop5.visibility.php

我認為這不是私有問題,因為私有屬性僅在此類中被引用。 我認為您假設將pageTitle引用為Controller屬性時將調用getPageTitle()。 但這僅在模型/活動記錄中適用。

這個“如果外部代碼引用propertyName並且不能公開訪問,則調用名為get + PrivatePropertyName的函數”不是PHP功能,並且我認為它在Controller中不是自動的。 您必須編寫自己的__get()訪問器才能自動調用此函數。

(在您引用的鏈接中,我只看到了顯式調用getter和setter的示例。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM