vin*_*a87 5 doctrine-orm zend-framework2
我使用zf2.1.3和doctrine 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');
}
Run Code Online (Sandbox Code Playgroud)
此代码返回以下内容:
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'
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:为什么Doctrine Hydrator不适用于有下划线的字段?我怎样才能做到这一点?
谢谢!
编辑
很抱歉很长时间没有回答.我的工作无法访问SO!
我尝试了以下方法:
$hydrator = new DoctrineObject($this->getEntityManager(), 'Application\Entity\Foo', false);
Run Code Online (Sandbox Code Playgroud)
对于我在这里发布的示例,此false参数工作正常.
但是,当我在表单上绑定类时,它不起作用!
有人有线索吗?
在问了几个月之后,我刚刚检查了DoctrineObject保湿器的源代码,我认为这是正在发生的事情:
默认情况下,除非您DoctrineObject使用byValue标记构建水化器,否则false水化器将以byValue模式运行.这意味着它试图从你试图补充的值中构造getter和setter方法名称,并且它的方式是通过调用ucfirst字段名称并将get/set添加到其中.
所以,例如,你有cat_name,所以它将尝试getCat_name明显不正确的getter方法.
你有4个选择,然后:
camelCase你的变量名byValue为false(以便它尝试直接访问变量)[虽然我认为你可能必须在这种情况下公开变量...我不确定可见性会如何影响它,因为我没有之前尝试过]Strategy或getCat_name(请不要这样做).| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |