在Doctrine PHP Symfony中重写Doctrine_记录(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

我的背景是Propel,所以我希望在Doctrine_记录(sfDoctrineRecord)中重写魔法getter是件简单的事情,但我得到的不是Segfault,就是重写方法被忽略,取而代之的是超类中的方法

什么是在条令记录实例上扩展/覆盖方法的正确条令方法(通过sfDoctrineRecord扩展条令记录)?这必须是可行的…或者我应该看看模板文档

谢谢,
Brian

尝试“获取”和“设置”方法。

不确定您到底想做什么,但这里有一些提示:

  • 条令(启用了
    ATTR\u AUTO\u ACCESSOR\u OVERRIDE
    属性,而是由symfony启用的)允许您仅通过在模型类中定义
    getColumnName
    方法来覆盖某些组件列的getter。这就是为什么
    getDisplayName
    方法会陷入无限循环,这通常会导致segfault

  • 要直接访问/修改列值(绕过自定义(get | set)ters),必须使用
    \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
    for
    test\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;
    
      }
    
    }