api-skeletons / zf-doctrine-module-zend-hydrator
修正DoctrineModule类以使用zend-hydrator
Requires
- doctrine/doctrine-module: ^1.0
- zendframework/zend-hydrator: ~1.0 || ^2.0
README
** 这是一个补丁仓库 **
由于zendframework/zend-stdlib的hydrators被移动到了自己的仓库zendframework/zend-hydrator,DoctrineModule仓库尚未更新以正确使用新的库。在@doctrineorm的许多讨论中,他们继续表示与zendframework/zend-hydrator保持一致,因为非常不寻常,新的库被编写为向后兼容zendframework/zend-stdlib,但后来版本的zend-hydrator中移除了这种向后兼容性,这使那些希望在项目中使用允许自定义hydrators的Doctrine的开发者处于不利地位。
这个库覆盖了来自DoctrineModule的文件,因为它们仍然引用zendframework/zend-stdlib来作为它们的hydrators。
关于这个问题的讨论
- 2016年1月30日: doctrine/DoctrineModule#548
- 2016年4月7日: doctrine/DoctrineModule#558 (评论)
安装
此模块的安装使用composer。有关composer文档,请参阅getcomposer.org。
$ php composer.phar require api-skeletons/zf-doctrine-module-zend-hydrator ^1.0
在您的composer.json
文件中,此库必须在doctrine/doctrine-module之前被包含。这种排序允许此仓库中的类覆盖损坏的DoctrineModule类。
安装警告
您可能会收到以下警告。这些是预期中的,不是问题所在。
Warning: Ambiguous class resolution, "DoctrineModule\Stdlib\Hydrator\DoctrineObject" was found in both "Projects/phpro/zf-doctrine-hydration-module/vendor/api-skeletons/zf-doctrine-module-zend-hydrator/src/DoctrineObject.php" and "/Projects/phpro/zf-doctrine-hydration-module/vendor/doctrine/doctrine-module/src/DoctrineModule/Stdlib/Hydrator/DoctrineObject.php", the first will be used. Warning: Ambiguous class resolution, "DoctrineModule\Stdlib\Hydrator\Filter\PropertyName" was found in both "/Projects/phpro/zf-doctrine-hydration-module/vendor/api-skeletons/zf-doctrine-module-zend-hydrator/src/Filter/PropertyName.php" and "/Projects/phpro/zf-doctrine-hydration-module/vendor/doctrine/doctrine-module/src/DoctrineModule/Stdlib/Hydrator/Filter/PropertyName.php", the first will be used. Warning: Ambiguous class resolution, "DoctrineModule\Stdlib\Hydrator\Strategy\AbstractCollectionStrategy" was found in both "/Projects/phpro/zf-doctrine-hydration-module/vendor/api-skeletons/zf-doctrine-module-zend-hydrator/src/Strategy/AbstractCollectionStrategy.php" and "/Projects/phpro/zf-doctrine-hydration-module/vendor/doctrine/doctrine-module/src/DoctrineModule/Stdlib/Hydrator/Strategy/AbstractCollectionStrategy.php", the first will be used.
何时使用此补丁仓库
如果您正在为实体使用自定义hydrators并且看到如下错误,此仓库将纠正它们。
Argument 2 passed to Zend\Stdlib\Hydrator\AbstractHydrator::addStrategy() must be an instance of Zend\Stdlib\Hydrator\Strategy\StrategyInterface ...
这是一个补丁仓库
如果您想参与DoctrineModule的讨论,以帮助在@doctrineorm仓库中正确实现zendframework/zend-hydrator,您可以参与上述链接中的讨论。
感谢
如果没有Toon Verwerft及其zf-doctrine-hydration-module的持续支持,找到这个补丁是不可能的。找到解决方案花费了近六个月的时间,他一直支持我的努力。谢谢你,Toon!