我的背景是在推动的,所以我希望这将是一个简单的事情复盖一个神奇的吸气一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方法。

其他提示

不知道怎么做你想做的 到底, 但这里有一些提示:

  1. 学说(与 ATTR_AUTO_ACCESSOR_OVERRIDE 属性启用, 启用解)可以让你重写某些组分列的吸气只是通过定义 getColumnName 方法中的模型类。这就是为什么你的 getDisplayName 方法可以无限循环下降通常会导致出现段错误.

  2. 访问/修改列价值直接(绕过定义(get|set)ters)你有用 _get('column_name')_set('column_name') 通过定义的方法 Doctrine_Record 类。

  3. 所有 $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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top