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

时间:2012-07-04 13:50:12

标签: symfony symfony-sonata

  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;
    }
    
  2. 我能够限制" list"结果给那些"属于"记录管理员即。仅记录管理员创建的属性(即实体)。

    问题: 通过手动更改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 个答案:

答案 0 :(得分:9)

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

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

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

3)要创建管理类,您应该扩展Sonata管理员:docs for this,这个问题似乎与奏鸣曲无关。你能否为D:_development \ rent2 \ app / config \ routing.yml?

提供内容