2016-09-13 17 views
2

「Offer」という名前のエンティティがあるとしましょう。SonataAdminBundle - 1つのエンティティの複数のリストビュー

オファーエンティティに対して複数のリストビューを作成したいと考えています。各リストビューにはさまざまな州(例:ドラフト、アクティブ、非アクティブなど)のオファーが含まれている必要があります。

これまでのところ、私は2人のオファー管理者:DraftOfferAdminActiveOfferAdminを作成しました。ここでカスタムクエリを定義しました。

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を共有します。どのようなアイデアを私の設定で逃すことができますか?

答えて

1

これはおそらく、管理クラスが異なる場合、エンティティクラスが同じであるためです。あなたが必要とする機能性を実現するためには、this articleをお勧めします。

今、私は1つのプロジェクトで、まさにこの機能が必要であること:

あなたの管理者クラスでは、あなたが

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.. 
} 

のようなルートとルートパターンを設定し、それをスタンダール方法を含める必要があり..

+0

答えはありませんが、他の人がそれを修正する方法に返答しない場合は、これを正しいものとしてマークします。とにかく、私は記事を読むようになりました。それは良い選択肢かもしれません。ありがとう! –

+0

サービス名をadmin_test_testのように大きく変えてみると、奇妙に聞こえるかもしれませんが、それは一度助けてくれました。 – Filchev

+0

最終的にMediaBundleは私にはもっと適していましたが、特定のフィールドで管理者を分ける問題は解決されていません。 –

関連する問題