繁体   English   中英

Sonata管理包,如何使用实体存储库类

[英]Sonata admin bundle, how to use entity repository classes

  1. 在PropertyAdmin中使用此代码扩展了Admin:

     public function createQuery($context = 'list') { $user = $this->getConfigurationPool()->getContainer()->get('security.context')->getToken()->getUser(); $query = $this->getModelManager()->createQuery($this->getClass(), 'o'); $query->where('o.Creator=:creator')->setParameter("creator", $user); return $query; } 

我能够将“列表”结果限制为“属于”已登录管理员的那些人。 仅记录管理员创建的属性(即实体)。

问题:通过手动更改URL(id值如1,2 ......),我可以编辑属于其他用户的Property。 对于编辑操作,根本不调用上面的查询。 如何改变这种行为?

2.而不是在控制器中放置查询,我可以从PropertyRepository类中获取它吗? 这将保留我可以编写单元测试的模型中的逻辑。

3.我正在尝试:ProductAdmin扩展AdminHelper {....} AdminHelper扩展Admin {....}

但它无法说“无法导入资源”D:_development \\ rent2 \\ app / config。“来自”D:_development \\ rent2 \\ app / config \\ routing.yml“。

AdminHelper是抽象类,但Sonata仍然可以读取它。 有解决方案吗

1.a)对象使用ACL, CRUD控制器有权限检查。

1.b)重新定义编辑操作,确保用户尝试编辑属于他的属性,类似于Page Admin Controller ,创建操作重新定义

2)在controller $ this-> getConfigurationPool() - > getContainer() - > get('doctrine') - > getRepository($ this-> getClass()); 允许您访问为此模型注册的存储库。 可能很少有其他方法可以从中获取服务容器和实体管理器。

3)要创建管理类,你应该扩展Sonata Admin: docs ,这个问题似乎与sonata没有关系。 你能为D:_development \\ rent2 \\ app / config \\ routing.yml提供内容吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM