Sonata Admin Class:添加指向Admin类的KnpMenu链接和自定义路由

时间:2016-10-11 17:22:34

标签: symfony sonata-admin knpmenubundle

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

例如,我有一个ContractAdmin类,其中包含布尔字段,例如"已启用"。 我想要的是在Sonata管理员的左侧KnpMenu中添加一些指向相同Admin类但具有自定义路由的链接(除了默认的" list" route),例如:

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

这可以避免我使用过滤器。

那么,我怎样才能创建这些链接并将其放到菜单中,该菜单使用自定义路径定位相应的管理类控制器?

谢谢;)

1 个答案:

答案 0 :(得分: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;
}