我们假设我有一个名为Offer的实体。
我想为Offer实体制作多个列表视图。每个列表视图应包含具有不同状态的商品(即草稿,活动,非活动......)。
到目前为止,我创建了两个优惠管理员:DraftOfferAdmin
和ActiveOfferAdmin
。在这里,我定义了自定义查询:
public function createQuery($context = 'list')
{
/** @var ModelManager $modelManager */
$modelManager = $this->getModelManager();
$entityManager = $modelManager->getEntityManager($this->getClass());
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('o')
->from($this->getClass(), 'o')
->where('o.state = :state')
->setParameter('state', 'draft');
$query = new ProxyQuery($queryBuilder);
foreach ($this->extensions as $extension) {
$extension->configureQuery($this, $query, $context);
}
return $query;
}
查询似乎工作正常!
我在服务中定义了管理员:
services:
admin.draft_offer:
class: IndexBundle\Admin\Offer\DraftOfferAdmin
arguments:
- null
- IndexBundle\Entity\Offer
- IndexBundle:CRUD
tags:
- { name: sonata.admin, manager_type: orm, group: Offers, label: Draft Offers }
admin.unverified_offer:
class: IndexBundle\Admin\Offer\UnverifiedOfferAdmin
arguments:
- null
- IndexBundle\Entity\Offer
- IndexBundle:CRUD
tags:
- { name: sonata.admin, manager_type: orm, group: Offers, label: Unverified Offers }
但两个列表视图页面共享相同的URL http://domain.com/admin/index/offer/list
。我的配置中有什么想法?
答案 0 :(得分:2)
这可能是因为虽然管理类不同,但实体类是相同的。我建议this article以获得您需要的功能,也更加用户友好。
现在我需要在一个项目中使用这个功能:
在您的管理类中,您需要设置路线和路线模式,如
class ClassAdmin extends AbstractAdmin
{
protected $baseRoutePattern = 'class-route';
protected $baseRouteName = 'class-route';
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
$query->join($query->getRootAlias() . '.status', 'st');
$query->andWhere('st.id = :status')
->setParameter('status', $statis);
return $query;
}
//admin class code..
}
并以标准的方式包含它..