gpt4 book ai didi

php - 在 Doctrine PHP Symfony 中覆盖 Doctrine_Record (sfDoctrineRecord) 实例方法

转载 作者:可可西里 更新时间:2023-11-01 12:26:20 25 4
gpt4 key购买 nike

我的背景是 Propel,所以我希望在 Doctrine_Record (sfDoctrineRecord) 中重写一个神奇的 getter 是一件简单的事情,但是我得到了一个段错误或者重写方法被简单地忽略了有利于父类(super class)中的一个。

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 实例上扩展/覆盖方法的正确 Doctrine 方法是什么(通过 sfDoctrineRecord extends Doctrine_Record)?这必须是可行的……或者我应该查看模板文档吗?

谢谢,布莱恩

最佳答案

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

  1. Doctrine(启用了 ATTR_AUTO_ACCESSOR_OVERRIDE 属性, 由 symfony 启用)允许您通过定义 getColumnName 来覆盖某些组件列的 getters模型类中的方法。这就是为什么你的 getDisplayName方法可能会陷入无限循环,这通常会导致段错误。

  2. 要直接访问/修改列值(绕过自定义 (get|set)ter),您必须使用 _get('column_name')_set('column_name') Doctrine_Record 定义的方法类。

  3. 所有 $obj->getSomething() , $obj->something$obj['something']电话实际上很神奇。它们被“重定向”到 $obj->get('something')这是访问模型数据的唯一真实方式。

关于php - 在 Doctrine PHP Symfony 中覆盖 Doctrine_Record (sfDoctrineRecord) 实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2587115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com