目前,我无法使用sonta admin bundle for symfony 2将子类显示在列表视图中
我可以根据高级配置页面(http://sonata-project.org/bundles/admin/2-1/doc/reference/advance.html)使用它来创建表单但是如何使用列表视图执行此操作?
如果我在url-list中传递子类?subclass = MySubClassName 并在listAction中设置对象
$object = $this->admin->getNewInstance();
$this->admin->setSubject($object);
我可以使用configureListFields()
获取主题并配置正确的字段if ($subject instanceof MySubClassName) {
$listMapper->add('MySubClassNameID');
$listMapper->add('MySubClassNameKey');
$listMapper->add('MySubClassNameStatus','text');
}
但最终结果表始终为空,symfony调试工具栏似乎表明db查询正在查找父类。有人让这个工作吗?
答案 0 :(得分:0)
我不确定你对列表视图中的那些“子类”的意思,但如果你想从另一个实体(通过外键与你的连接)添加一个字段,你可以这样做:
$listMapper
->addIdentifier('id')
->addIdentifier('title')
->add('name')
->add('entity1.customField1')
->add('entity2.customField2');
答案 1 :(得分:0)
如果其他人面对这一点,我发现了如何做到这一点。
要使其以与编辑页面类似的方式工作,您将在url
中传递子类...list?subclass=MySubClass
在自定义管理员crud控制器中设置listAction的主题
public function listAction()
{
if (false === $this->admin->isGranted('LIST')) {
throw new AccessDeniedException();
}
if ($listMode = $this->getRequest()->get('_list_mode')) {
$this->admin->setListMode($listMode);
}
$this->admin->setSubject($this->admin->getNewInstance());
$datagrid = $this->admin->getDatagrid();
$formView = $datagrid->getForm()->createView();
// set the theme for the current Admin Form
$this->get('twig')->getExtension('form')->renderer->setTheme($formView, $this->admin->getFilterTheme());
return $this->render($this->admin->getTemplate('list'), array(
'action' => 'list',
'form' => $formView,
'datagrid' => $datagrid,
'csrf_token' => $this->getCsrfToken('sonata.batch'),
));
}
然后在Admin类中覆盖createQuery方法
public function createQuery($context = 'list')
{
$cName = get_class($this->getSubject());
$query = $this->getModelManager()->createQuery($cName);
foreach ($this->extensions as $extension) {
$extension->configureQuery($this, $query, $context);
}
return $query;
}
答案 2 :(得分:0)
如果您使用url参数传递任何内容,则还应覆盖getPersistentParameters以将您的网址请求添加到Pager,FilterForm以及batchActions的表单(或列表视图中显示的其他表单)
<?php
class YourAdmin extends Admin
{
public function getPersistentParameters()
{
if (!$this->getRequest()) {
return array();
}
return array(
'subclass' => $this->getRequest()->get('subclass'),
);
}
}