Yii扩展了控制器功能

时间:2013-11-20 18:08:09

标签: php yii extend method-overriding

我需要做的是扩展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

2 个答案:

答案 0 :(得分:0)

private个变量只能在创建它们的类中访问,例如Controller

您应该使用protected,因为这些变量也可以在从声明它的类继承的所有类中访问。

有关详情,请访问:https://stackoverflow.com/a/4361582/428543http://php.net/manual/en/language.oop5.visibility.php

答案 1 :(得分:0)

我不认为这是私有问题,因为私有属性仅在此类中引用。我认为你假设当pageTitle被引用为Controller属性时将调用getPageTitle()。但这可能只适用于模型/主动记录。

如果外部代码引用propertyName并且它不可公开访问,则“调用名为get + PrivatePropertyName的函数”不是PHP功能,我不认为它在Controller中是自动的。您必须编写自己的__get()访问器才能自动调用此函数。

(在你引用的链接中,我只看到了显式调用getter和setter的例子。)