SonataAdminBundle - 一个实体的多个列表视图
SonataAdminBundle - multiple list views of one entity
假设我有一个名为 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
。有什么想法我在配置中遗漏了什么吗?
发生这种情况可能是因为虽然管理员 class 不同,但您的实体 class 是相同的。我建议 this article 以实现您需要的功能,同时也更加人性化。
现在我在一个项目中正好需要这个功能:
在您的管理员中 class 您需要像
一样设置路由和路由模式
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..
}
并以标准方式包含它..
假设我有一个名为 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
。有什么想法我在配置中遗漏了什么吗?
发生这种情况可能是因为虽然管理员 class 不同,但您的实体 class 是相同的。我建议 this article 以实现您需要的功能,同时也更加人性化。
现在我在一个项目中正好需要这个功能:
在您的管理员中 class 您需要像
一样设置路由和路由模式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..
}
并以标准方式包含它..