我使用Sonata admin Generator。 我想从symfony类创建多个列表。 例如,我有一张发票清单,我想创建一个带有付款账单的选项卡,另一个带有待处理账单的选项卡和一个禁用发票的最后一个选项卡。 这个状态在课堂上。 我在Sonata演示中看到使用上下文的this page(admin / admin),但如果可能的话,我不会安装mediabundle。
答案 0 :(得分:1)
没有mediabundle就可以。 “项目状态”与我有相同的用例。这些状态在我的数据库中。
需要采取以下几个步骤:
制作自己的CRUDController:
namespace Your\OwnBundle\Controller;
use Sonata\AdminBundle\Controller\CRUDController as Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
class ProjectCrudController extends Controller
{
/**
* {@inheritdoc}
*
* @param Request $request
*/
public function render($view, array $parameters = array(), Response $response = null, Request $request = null)
{
$projectStatusRepo = $this->getDoctrine()->getRepository('EvinceObjectsBundle:ProjectStatus');
// here inject the params you'll need
// you can do it only when $parameters['action'] == 'list' if you want
$parameters['projectStatuses'] = $projectStatusRepo->findAll();
$parameters['activeProjectStatus'] = $request->get('status', 1);
return parent::render($view, $parameters, $response);
}
}
在services.yml(或xml)
中注入您自己的CRUDController sonata.admin.project:
class: Your\OwnBundle\Admin\ProjectAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "project", label: "Project" }
arguments:
- ~
- Your\OwnBundle\Entity\Project
- YourOwnBundle:ProjectCrud
calls:
- [ setLabelTranslatorStrategy, ["@sonata.admin.label.strategy.underscore"]]
- [ setTemplate, [list, YourOwnBundle:ProjectAdmin:list.html.twig]]
注意setTemplate-call,让我们创建你的模板
创建自己的列表模板
{% extends 'SonataAdminBundle:CRUD:base_list.html.twig' %}
{% block preview %}
<ul class="nav nav-pills">
<li><a><strong>{{ "label.select_projectstatus"|trans({}, 'SonataProjectBundle') }}</strong></a></li>
{% for projectStatus in projectStatuses %}
{% set active = false %}
{% if projectStatus.id == activeProjectStatus %}
{% set active = true %}
{% endif %}
<li class="{% if active %}active{% endif %}" ><a href="{{ admin.generateUrl('list', {'status' : projectStatus.id }) }}">{{ projectStatus.status }}</a></li>
{% endfor %}
</ul>
{% endblock %}
在您自己的管理类中覆盖Admin :: getFilterParameters函数。在这里,您需要根据您的requestparam设置过滤器:
/**
* {@inheritdoc}
*/
public function getFilterParameters()
{
$parameters = parent::getFilterParameters();
return array_merge(array(
'status' => array(
'type' => '',
'value' => $this->getRequest()->get('status', 1),
)
), $parameters);
}