我需要做的是扩展getPageTitle()
功能,以便翻译标题并交换action
和controller
这是我放在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;
}
}
}
但是如果在视图中我使用这些
中的任何内容设置了新的自定义标题 $this->pageTitle = 'Title';
$this->setPageTitle('Title2');
Yii::app()->getController()->pageTitle="Title3";
标题不会改变
如果我检查parent::getPageTitle()
它总是返回值
如果我检查$this->_pageTitle
它总是返回null
答案 0 :(得分:0)
private
个变量只能在创建它们的类中访问,例如Controller
。
您应该使用protected
,因为这些变量也可以在从声明它的类继承的所有类中访问。
有关详情,请访问:https://stackoverflow.com/a/4361582/428543和http://php.net/manual/en/language.oop5.visibility.php
答案 1 :(得分:0)
我不认为这是私有问题,因为私有属性仅在此类中引用。我认为你假设当pageTitle被引用为Controller属性时将调用getPageTitle()。但这可能只适用于模型/主动记录。
如果外部代码引用propertyName并且它不可公开访问,则“调用名为get + PrivatePropertyName的函数”不是PHP功能,我不认为它在Controller中是自动的。您必须编写自己的__get()访问器才能自动调用此函数。
(在你引用的链接中,我只看到了显式调用getter和setter的例子。)