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;
}
将 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;
}