在Doctrine PHP Symfony中重写Doctrine_记录(sfDoctrineRecord)实例方法
我的背景是Propel,所以我希望在Doctrine_记录(sfDoctrineRecord)中重写魔法getter是件简单的事情,但我得到的不是Segfault,就是重写方法被忽略,取而代之的是超类中的方法 什么是在条令记录实例上扩展/覆盖方法的正确条令方法(通过sfDoctrineRecord扩展条令记录)?这必须是可行的…或者我应该看看模板文档 谢谢,在Doctrine PHP Symfony中重写Doctrine_记录(sfDoctrineRecord)实例方法,php,symfony1,doctrine,extending,getter-setter,Php,Symfony1,Doctrine,Extending,Getter Setter,我的背景是Propel,所以我希望在Doctrine_记录(sfDoctrineRecord)中重写魔法getter是件简单的事情,但我得到的不是Segfault,就是重写方法被忽略,取而代之的是超类中的方法 什么是在条令记录实例上扩展/覆盖方法的正确条令方法(通过sfDoctrineRecord扩展条令记录)?这必须是可行的…或者我应该看看模板文档 谢谢, Brian尝试“获取”和“设置”方法。不确定您到底想做什么,但这里有一些提示: 条令(启用了ATTR\u AUTO\u ACCESSOR
Brian尝试“获取”和“设置”方法。不确定您到底想做什么,但这里有一些提示:
ATTR\u AUTO\u ACCESSOR\u OVERRIDE
属性,而是由symfony启用的)允许您仅通过在模型类中定义getColumnName
方法来覆盖某些组件列的getter。这就是为什么getDisplayName
方法会陷入无限循环,这通常会导致segfault\u get('column _name')
和\u set('column _name')
类定义的方法$obj->getSomething()
,$obj->something
和$obj['something']
调用实际上都很神奇。它们被“重定向”到$obj->get('something')
,这是访问模型数据的唯一方法$manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
然后:
这项工作:
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;
}
}
感谢您提供有关自动存取器覆盖的信息;现在我看到了在返回字段值之前检查的记录的位置-br如果说‘test_var’,这会起作用吗?我试图让getter方法处理带有下划线的字段名,但不知何故,这不起作用。有什么建议吗?@Shivaas请尝试
getTestVar
fortest\u var
public function getAnything()
{
return $this->_get('anything');
}
public function setAnything()
{
return $this->_set('anything', $value);
}
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;
}
}