Php Zend Framework 2-水合器策略未响应和水合

Php Zend Framework 2-水合器策略未响应和水合,php,doctrine-orm,zend-form,zend-framework2,Php,Doctrine Orm,Zend Form,Zend Framework2,我基本上实现了 主要区别是(我想)我使用了Doctrine2 调用构造函数类(打印测试回音),但不调用两个函数extract()和hydrome() 我添加了以下策略: $hydrator = new DoctrineEntity($entityManager); $hydrator->getHydrator()->addStrategy('my_attribute', new MyHydrationStrategy()); $form->setHydrator($hydrat

我基本上实现了

主要区别是(我想)我使用了
Doctrine2

调用构造函数类(打印测试回音),但不调用两个函数
extract()
hydrome()

我添加了以下策略:

$hydrator = new DoctrineEntity($entityManager);
$hydrator->getHydrator()->addStrategy('my_attribute', new MyHydrationStrategy());
$form->setHydrator($hydrator);
有人提出了一种类似的问题

也许问题在于我如何添加这个策略。但我真的不知道

如果有人能告诉我我做错了什么,那就太好了。

@Sam解决了这个问题

这是目前普遍存在的问题。问题是:addStrategy()是ZF2的ClassMethodHyderator的一个东西-这个Hyderator在Doctrinentity中默默地使用。要添加自定义策略,只需不使用DoctrineEntity,而是使用ClassMethodsHydrator本身。在ClassMethods上,您将能够添加策略

你也可以看看这个问题/公关

我的代码现在如下所示:

$hydrator = new ClassMethodsHydrator();
$hydrator->addStrategy('my_attribute', new MyHydrationStrategy());
$form->setHydrator($hydrator);
顺便说一句:属性中的下划线不会导致任何问题


不幸的是,我偶然发现了另一个基于外键关系的问题,它似乎甚至是一个
原则

请参阅本文,以获得更干净、更合适的解决方案


首先检查“我的属性”名称是否正确。它可能在特定的上下文中使用驼峰大小写,但输出小写下划线。实现这一点的一种方法是获取hydrator的类名并检查hydrate()方法。您应该看到一个对hydrateValue()的调用-此方法的第一个参数是字段的名称-因此我将呼出这些参数。由于我不熟悉ZF2中的原则-如果您发布水合器类,我将尝试进一步提供帮助。诚然,在查看水合器代码时,我的解释大错特错,但解决方案最终使其工作。