Overriding Doctrine_Record (sfDoctrineRecord) instance methods in Doctrine PHP Symfony

后端 未结 4 1597
滥情空心
滥情空心 2021-02-09 01:16

My background is in Propel, so I was hoping it would be a simple thing to override a magical getter in a Doctrine_Record (sfDoctrineRecord), but I\'m getting either a Segfault o

相关标签:
4条回答
  • 2021-02-09 01:23

    Configure Doctrine:

    $manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true); 
    

    then:

    public function getAnything()
    {
        return $this->_get('anything');
    }
    
    public function setAnything()
    {
        return $this->_set('anything', $value);
    }
    
    0 讨论(0)
  • 2021-02-09 01:26

    Try _get and _set methods.

    0 讨论(0)
  • 2021-02-09 01:35

    Not sure about what do you wanted to do exactly, but here are some hints:

    1. Doctrine (with ATTR_AUTO_ACCESSOR_OVERRIDE attribute enabled, which is enabled by symfony) allows you to override certain component columns' getters just by defining getColumnName methods in model class. That's why your getDisplayName method can fall infinite loop which usually causes segfault.

    2. To access/modify column value directly (bypassing custom (get|set)ters) you have to use _get('column_name') and _set('column_name') methods defined by Doctrine_Record class.

    3. All the $obj->getSomething(), $obj->something and $obj['something'] calls are actually magical. They are "redirected" to $obj->get('something') which is only real way to access model data.

    0 讨论(0)
  • 2021-02-09 01:40

    This works:

    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;
    
      }
    
    }
    
    0 讨论(0)
提交回复
热议问题