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

Sonata Admin Class : add KnpMenu links pointing Admin class with custom route

将 SonataAdminBundle 与 Symfony2 结合使用,我正在寻找一种解决方案,以通过特定路径访问某些 Admin classes。

例如,我有一个带有布尔字段的 ContractAdmin class,例如 "Enabled"。 我想要的是在 sonata admin 的左侧 KnpMenu 中添加一些链接指向同一个 Admin class 但带有自定义路由(除了默认的 "list" 路由),例如:

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

那么,我如何创建这些链接并将其放置到菜单中,该菜单以自定义路由指向相应的管理员 class 控制器?

谢谢 ;)

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

class ContractAdminController extends Controller {

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

我已将此自定义路由声明到管理员 class :

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

然后,覆盖管理中的 createQuery 方法 class,我正在使用这样的请求“_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;
}