在ZF2中使用Doctrine模块水化器和表单注释

布鲁斯

我在这里需要一些建议。我在一个使用Doctrine 2和Doctrine Orm模块的ZF2项目中。我使用教义模块提供的服务来处理身份验证。结果是,在身份验证之后,我的身份验证服务中具有作为用户实体实例的身份(由getIdentity()方法返回)。

我有两个实体:用户和组。在用户实体与组之间定义了多对一关系(一个用户属于一个组,一个组具有多个用户)。基本的东西。

当连接的用户需要去编辑它在CRUD中自己的组时,我的问题就来了。

处理CRUD的方法很简单:我在实体的注释中定义了表单,并指定了“ Doctrine Hydrator”并使用“ Doctrine Object Select”。除了编辑自己的小组外,所有事情都可以完美地发挥作用。

我的理解是:由于我的多对一关系处于延迟加载获取模式,因此在身份验证后,原则的身份映射包含用户组作为代理的实例。当用户进行编辑操作时,将发生以下情况:

/*
Code that get the goup id to edit from request
*/
if (!empty($id)) {
    $entity = $groupRepository->find($id);
}

$builder = new AnnotationBuilder();
$this->form = $builder->createForm($entity);

结果是,当将不在学说身份映射中的任何组作为代理实例进行编辑时,一切都会好起来的。但是,如果我需要编辑的实体已经作为代理实例存在于身份映射中,则表单工厂将找不到在我的实体中定义的注释,并且注释会中断。也许我的方式是不好的做法?我想使用批注构建表单。

我唯一能找到的解决方法(我猜这是一种糟糕的方法)是这样更改我的代码:

/*
Code that get the goup id to edit from request
*/
if (!empty($id)) {
    $em->clear(); <== NEW LINE HERE
    $entity = $groupRepository->find($id);
}

$builder = new AnnotationBuilder();
$this->form = $builder->createForm($entity);

从理论上讲,在我的用例中,调用clear()来分离所有实体应该不是问题,因为我知道我只想编辑组实体,但是我想这可能不是正确的选择。

另一个解决方案(但尚未尝试):创建一个自定义FormFactory,并将其传递给AnnotationBuilder。然后,此自定义FormFactory将在从注释启动表单创建之前检测实体的类型。如果它是代理,则应该获取“真实”类的注释?

还是我错过了一些简单的事情?

枯萎

当您通过代理服务器时,这不能正常工作,我感到有些惊讶,但是我同意您当前的解决方案很糟糕:)。您可以这样解决问题:

// collect the class from the entity or proxy
$className = \Doctrine\Common\Util\ClassUtils::getClass($entity);

$builder = new AnnotationBuilder();
$this->form = $builder->createForm($className);

传递类名时,注释生成器运行良好。上面的代码从代理对象和实体中收集真实的类名,因此这在两种情况下都适用。

但是我仍然建议检查您的配置,因为我几乎可以确定它也可以与代理一起正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ZF2水化器和阵列

来自分类Dev

初始化水化器结果集并在ZF2中聚合

来自分类Dev

我如何在Doctrine 2 ODM中使用mongoDB在zf2中保存数据?

来自分类Dev

ZF2:如何翻译表单注释?

来自分类Dev

从zf2中的表单对象获取输入验证器

来自分类Dev

如何在zf2中使用帮助器类?

来自分类Dev

无法在ZF2中使用控制台

来自分类Dev

如何在ZF2中的tableGateway中使用hading()

来自分类Dev

如何在zf2中使用辅助类?

来自分类Dev

Zf2中的Bootstrap 3表单

来自分类Dev

ZF2表单中的按钮内容

来自分类Dev

Zf2中的Bootstrap 3表单

来自分类Dev

zf2 doctrine2如何在实体列中使用tinyint数据类型

来自分类Dev

使用ZF2和Doctrine2将SQL Server表转换为MySQL

来自分类Dev

ZF2和Doctrine2:模拟EntityRepository :: findOneByField

来自分类Dev

如何使用命令行工具为ZF2和Doctrine生成“ getter / setter”?

来自分类Dev

zf2 - 在表单/控制器工厂中获取控制器插件

来自分类Dev

配置中的ZF2 Doctrine2 setFilterSchemaAssetsExpression设置

来自分类Dev

配置中的ZF2 Doctrine2 setFilterSchemaAssetsExpression设置

来自分类Dev

ZF2中的Acl和RBAC

来自分类Dev

我可以将Mockery中的shouldReceive和ShouldNotReceive结合在一起使用Doctrine Entity Manager在ZF2中进行控制器测试吗?

来自分类Dev

Doctrine2和zf2:将fetchAll()结果转换为JSON,然后将结果转换为数组,然后在ZF2中转换为json

来自分类Dev

zf2为什么要在模块配置的invokables数组中添加控制器

来自分类Dev

在zf2中查找模块控制器时出错

来自分类Dev

zf2为什么要在模块配置的invokables数组中添加控制器

来自分类Dev

Zf2表单日期元素在不同浏览器中的问题

来自分类Dev

使用Ajax将表单数据发布到ZF2控制器

来自分类Dev

使用ZF2更改Doctrine上的DefaultEntityListenerResolver

来自分类Dev

使用ZF2更改Doctrine上的DefaultEntityListenerResolver

Related 相关文章

  1. 1

    ZF2水化器和阵列

  2. 2

    初始化水化器结果集并在ZF2中聚合

  3. 3

    我如何在Doctrine 2 ODM中使用mongoDB在zf2中保存数据?

  4. 4

    ZF2:如何翻译表单注释?

  5. 5

    从zf2中的表单对象获取输入验证器

  6. 6

    如何在zf2中使用帮助器类?

  7. 7

    无法在ZF2中使用控制台

  8. 8

    如何在ZF2中的tableGateway中使用hading()

  9. 9

    如何在zf2中使用辅助类?

  10. 10

    Zf2中的Bootstrap 3表单

  11. 11

    ZF2表单中的按钮内容

  12. 12

    Zf2中的Bootstrap 3表单

  13. 13

    zf2 doctrine2如何在实体列中使用tinyint数据类型

  14. 14

    使用ZF2和Doctrine2将SQL Server表转换为MySQL

  15. 15

    ZF2和Doctrine2:模拟EntityRepository :: findOneByField

  16. 16

    如何使用命令行工具为ZF2和Doctrine生成“ getter / setter”?

  17. 17

    zf2 - 在表单/控制器工厂中获取控制器插件

  18. 18

    配置中的ZF2 Doctrine2 setFilterSchemaAssetsExpression设置

  19. 19

    配置中的ZF2 Doctrine2 setFilterSchemaAssetsExpression设置

  20. 20

    ZF2中的Acl和RBAC

  21. 21

    我可以将Mockery中的shouldReceive和ShouldNotReceive结合在一起使用Doctrine Entity Manager在ZF2中进行控制器测试吗?

  22. 22

    Doctrine2和zf2:将fetchAll()结果转换为JSON,然后将结果转换为数组,然后在ZF2中转换为json

  23. 23

    zf2为什么要在模块配置的invokables数组中添加控制器

  24. 24

    在zf2中查找模块控制器时出错

  25. 25

    zf2为什么要在模块配置的invokables数组中添加控制器

  26. 26

    Zf2表单日期元素在不同浏览器中的问题

  27. 27

    使用Ajax将表单数据发布到ZF2控制器

  28. 28

    使用ZF2更改Doctrine上的DefaultEntityListenerResolver

  29. 29

    使用ZF2更改Doctrine上的DefaultEntityListenerResolver

热门标签

归档