3

将 SonataAdminBundle 与 Symfony2 一起使用,我正在寻找一种解决方案来访问具有特定路由的一些 Admin 类。

例如,我有一个带有诸如“已启用”之类的布尔字段的 ContractAdmin 类。我想在奏鸣曲管理员的左侧 KnpMenu 中添加一些指向同一个 Admin 类但具有自定义路由(默认“列表”路由除外)的链接,例如:

  • 合同
    • 所有合约
    • 已启用合同(仅列出已启用的合同)
    • 尚未启用的合约(仅列出未启用的合约)

这将避免我使用过滤器。

那么,我如何创建这些链接并将其放置到菜单中,这些链接针对具有自定义路由的相应管理类控制器?

谢谢 ;)

4

1 回答 1

1

我已经解决了它为这个管理类声明一个自定义 CRUDController 并添加调用 listAction 方法所需的操作:

class ContractAdminController extends Controller {

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

我已将此自定义路由声明到 Admin 类中:

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;
}
于 2016-10-12T12:33:44.417 回答