Symfony 2 Sonata管理列表视图不显示子类
目前,我无法使用sonta admin bundle for symfony 2在列表视图中显示子类 我可以让它按照advanced config page()来创建表单,但是如何使用列表视图来实现这一点呢 如果我在url-list中传递子类?subclass=MySubClassName 并在我的listAction中设置对象Symfony 2 Sonata管理列表视图不显示子类,symfony,sonata-admin,sonata,Symfony,Sonata Admin,Sonata,目前,我无法使用sonta admin bundle for symfony 2在列表视图中显示子类 我可以让它按照advanced config page()来创建表单,但是如何使用列表视图来实现这一点呢 如果我在url-list中传递子类?subclass=MySubClassName 并在我的listAction中设置对象 $object = $this->admin->getNewInstance(); $this->admin->setSubject($obje
$object = $this->admin->getNewInstance();
$this->admin->setSubject($object);
我可以使用configureListFields()获取主题并配置正确的字段
但是最终结果表总是空的,symfony调试工具栏似乎显示db查询正在查找父类。有人能做到这一点吗?我不知道你对列表视图中的“子类”是什么意思,但如果你想从另一个实体(通过外键与你的实体连接)添加一个字段,你可以这样做:
$listMapper
->addIdentifier('id')
->addIdentifier('title')
->add('name')
->add('entity1.customField1')
->add('entity2.customField2');
万一有人遇到这种情况,我就知道怎么做了 要使其以类似于编辑页面的方式工作,您需要在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'),
));
}
然后在管理类中重写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;
}
如果通过url参数传递任何内容,还应覆盖getPersistentParameters,将url请求添加到Pager、FilterPerform和batchActions表单(或列表视图上显示的其他表单)
我所说的子类是指从我的管理员处理的基类继承的类(参见我在原始问题中发布的链接中的16.3)。因此,在服务定义中,它们被定义为sonata.block.service.bulkjob:class:IDest\ContentBundle\block\JobBulkBlockService参数:[“sonata.block.service.bulkjob”、@templating、@sonata.admin.pool]标记:-{name:sonata.block}调用:-[setSubClasses,[{AtlassianJob:IDest\ContentBundle\Document\Job\AtlassianJob,AwsJob:IDest\ContentBundle\Document\Job\AwsJob}]
很抱歉把代码弄乱了,我无法很好地展示,希望您能理解
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;
}
<?php
class YourAdmin extends Admin
{
public function getPersistentParameters()
{
if (!$this->getRequest()) {
return array();
}
return array(
'subclass' => $this->getRequest()->get('subclass'),
);
}
}