Sonata 管理包,如何使用实体存储库类
Posted
技术标签:
【中文标题】Sonata 管理包,如何使用实体存储库类【英文标题】:Sonata admin bundle, how to use entity repository classes 【发布时间】:2012-07-05 00:51:54 【问题描述】:在 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...),我可以编辑属于其他用户的属性。对于编辑操作,根本不调用上述查询。如何改变这种行为?
2.我可以从 PropertyRepository 类中获取它,而不是把查询放在控制器中吗?这样可以将逻辑保留在我可以为其编写单元测试的模型中。
3.我正在尝试: ProductAdmin 扩展了 AdminHelper .... AdminHelper 扩展了 Admin ....
但它无法从“D:_development\rent2\app/config\routing.yml”中导入资源“D:_development\rent2\app/config.”。
AdminHelper 是抽象类,但 Sonata 仍然读取它。有什么解决办法吗?
【问题讨论】:
【参考方案1】:1.a) 对您的对象使用 ACL,CRUD controller 具有权限检查。
1.b) 重新定义编辑动作,确保用户尝试编辑属于他的属性,类似于Page Admin Controller,重新定义创建动作
2) 在控制器中 $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository($this->getClass());使您可以访问为此模型注册的存储库。可能没有其他方法可以从中获取服务容器和实体管理器。
3) 要创建您的管理类,您应该扩展 Sonata Admin:docs for this,这个问题似乎与我的奏鸣曲无关。能否提供 D:_development\rent2\app/config\routing.yml 的内容?
【讨论】:
1.好的,我将谷歌如何使用权限检查 2. 我通过分析 Admin 类解决了这个问题。它具有我在子类中继承的 getObject($id) 方法并解决了该问题。 3.由于许多其他问题,我重新安装了所有东西,现在它可以工作了。老实说,我不知道怎么做,但我会保留它:) 第 2 点。真的帮帮我:D以上是关于Sonata 管理包,如何使用实体存储库类的主要内容,如果未能解决你的问题,请参考以下文章
Symfony & Sonata:如何将 javascript 添加到实体管理表单?
Sonata 管理包:无法删除与 sonata_type_admin 的关系