gpt4 book ai didi

doctrine-orm - Doctrine 2 Hydrator - 带下划线的字段

转载 作者:行者123 更新时间:2023-12-04 04:09:57 33 4
gpt4 key购买 nike

我使用 zf2.1.3 和教义 2。我试图在我的类里面补充信息并意识到 DoctrineModule\Stdlib\Hydrator\DoctrineObject不适用于带有下划线的字段,例如 cat_id .

这里有一个例子:

/* namespace Application\Entity; */

class Foo
{
private $cat_id;
private $cat_name;

public function getCatId()
{
return $this->cat_id;
}

public function setCatName($name)
{
$this->cat_name = $name;
return $this;
}

public function getCatName()
{
return $this->cat_nome;
}
}

class Bar
{
private $id;
private $name;

public function getId()
{
return $this->id;
}

public function setName($name)
{
$this->name = $name;
return $this;
}

public function getName()
{
return $this->nome;
}
}

/* namespace Application\Controller; */

use \DoctrineModule\Stdlib\Hydrator\DoctrineObject;
public function indexAction()
{
$hydrator = new DoctrineObject($this->getEntityManager(), 'Application\Entity\Foo');
$foo = $hydrator->hydrate(array('cat_name' => 'Frank Moraes'), new Foo());
\Zend\Debug\Debug::dump($foo, 'Foo Hydrator');

$hydrator = new DoctrineObject($this->getEntityManager(), 'Application\Entity\Bar');
$bar = $hydrator->hydrate(array('name' => 'Frank Moraes'), new Bar());
\Zend\Debug\Debug::dump($inscrit, 'Bar Hydrator');
}

此代码返回以下内容:
Foo Hydrator
object(Application\Entity\Foo)
private 'cat_id' => null
private 'cat_name' => null

Bar Hydrator
object(Application\Entity\Foo)
private 'id' => null
private 'name' => 'Frank Moraes'

所以我的问题是:为什么 Doctrine Hydrator 不适用于带有下划线的字段?
我怎样才能使这项工作?

谢谢!

已编辑

抱歉很久没有回复。 A 在我的工作上无权访问 SO!

我尝试了以下方法:
$hydrator = new DoctrineObject($this->getEntityManager(), 'Application\Entity\Foo', false);

对于我在此处发布的示例,此 false参数工作正常。

但是,当我在表单上绑定(bind)类(class)时它不起作用!

有人有线索吗?

最佳答案

几个月后有人问过这个问题,但我一直在检查 DoctrineObject 的源代码水合器刚刚,我认为这就是发生的事情:

默认情况下,除非您构造 DoctrineObjectbyValue 的水合器标记为 false ,水合器将在 byValue 中工作模式。这意味着它会尝试从您尝试水合的值构造 getter 和 setter 方法名称,它的方法是调用 ucfirst在字段名称上并在其前面加上 get/set。

因此,例如,您有 cat_name ,所以它会尝试getter方法getCat_name这显然是不正确的。

你有4个选择,那么:

  • 答: camelCase你的变量名
  • 乙:设置 byValue为false(以便它尝试直接访问变量)[尽管我认为在这种情况下您可能必须将变量公开...我不确定可见性将如何影响它,因为我之前没有尝试过]
  • 联系人:使用不同的补水方法Strategy
  • 电话:只是有奇怪的 getter 和 setter 名称,例如 getCat_name (请不要这样做)。
  • 关于doctrine-orm - Doctrine 2 Hydrator - 带下划线的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15329871/

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