2016-10-11 104 views
3

在Symfony2中使用SonataAdminBundle,我正在尋找一種解決方案來訪問某些具有特定路由的管理員類。Sonata管理員類別:添加KnpMenu鏈接指向具有自定義路由的管理員類別

例如,我有一個ContractAdmin類,其中包含諸如「已啓用」等布爾字段。 我想什麼是奏鳴曲管理的左KnpMenu增加,一些鏈接指向同一個管理類,但有一個自定義路由(不是默認的「名單」航線除外),例如:

  • 合同
    • 所有合同
    • 合同啓用(上市僅啓用合同)
    • 合同尚未啓用(只列出未啓用合同)

這將避免我使用過濾器。

那麼,我該如何創建並將這些鏈接添加到目標相應的管理類控制器與自定義路由的菜單?

謝謝;)

+0

我找到了一種將自定義CRUD控制器鏈接到菜單中的自定義路由的方法。 將configureRoutes方法中的路由聲明到admin類中,然後將相應的操作添加到相應的CRUD控制器中。 在此操作中,我使用與「listAction」中相同的代碼。 所以現在的問題是:如何修改用於從該控制器操作生成列表視圖的查詢? – icedocemile

回答

1

我已經解決了它宣稱該管理類的定製CRUDController並添加行爲需要調用的listAction方法:

class ContractAdminController extends Controller { 

public function contractsEnabledAction() { 
    return $this->listAction(); 
} 

我宣佈這個自定義路線進入管理類:

protected function configureRoutes(RouteCollection $collection) { 
    parent::configureRoutes($collection); 
    $collection->add('contracts_enabled', 'contractsEnabled/'); 
} 

然後,覆蓋在管理類中的方法的createQuery,我使用的要求「_route」屬性這樣的:

public function createQuery($context = 'list') { 
    $query = parent::createQuery($context); 

    switch ($this->getRequest()->get("_route")) { 
     case "admin_acme_contract_contracts_enabled" : 
      $query->andWhere(
        $query->expr()->eq($query->getRootAliases()[0] . '.enabled', ':param') 
      ); 
      $query->setParameter('param', true); 
      break; 
    } 
    return $query; 
}