压倒一切的Doctrine_Record(sfDoctrineRecord)的实例的方法在理论PHP解
-
24-09-2019 - |
题
我的背景是在推动的,所以我希望这将是一个简单的事情复盖一个神奇的吸气一Doctrine_Record(sfDoctrineRecord),但我越来越任何一个出现段错误或替代方法是不利于一个在超类。
https://gist.github.com/697008eaf4d7b606286a
class FaqCategory extends BaseFaqCategory
{
public function __toString()
{
return $this->getCategory();
}
// doesn't work
// override getDisplayName to fall back to category name if getDisplayName doesn't exist
public function getDisplayName() {
// also tried parent::getDisplayName() but got segfault(!)
if(isset($this->display_name)) {
$display_name = $this->display_name;
} else {
$display_name = $this->category;
}
return $display_name;
}
}
什么是适当的原则的方式来扩展/替代方法上的一个实例Doctrine_Record(通过sfDoctrineRecord延伸Doctrine_Record)?这是可行的...或者我应该看看文档模板?
谢谢, 布赖恩
解决方案
尝试_get和_set方法。
其他提示
不知道怎么做你想做的 到底, 但这里有一些提示:
学说(与
ATTR_AUTO_ACCESSOR_OVERRIDE
属性启用, 是 启用解)可以让你重写某些组分列的吸气只是通过定义getColumnName
方法中的模型类。这就是为什么你的getDisplayName
方法可以无限循环下降通常会导致出现段错误.访问/修改列价值直接(绕过定义(get|set)ters)你有用
_get('column_name')
和_set('column_name')
通过定义的方法Doctrine_Record
类。所有
$obj->getSomething()
,$obj->something
和$obj['something']
电话是实际上的神奇。他们是"重新定向的"$obj->get('something')
这是唯一 真的 的方式来访问的模型数据。
这个作品:
class FaqCategory extends BaseFaqCategory
{
public function __toString()
{
return $this->getCategory();
}
public function getDisplayName() {
if($this->_get("display_name") != "") {
$display_name = $this->_get("display_name");
} else {
$display_name = $this->getCategory();
}
return $display_name;
}
}
配置原则:
$manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
然后:
public function getAnything()
{
return $this->_get('anything');
}
public function setAnything()
{
return $this->_set('anything', $value);
}
不隶属于 StackOverflow