簡體   English   中英

Symfony 2 Sonata管理員列表視圖不顯示子類

[英]Symfony 2 Sonata admin list views do not display subclasses

目前,我無法使用Symfony 2的sonta admin捆綁包使子類出現在列表視圖中

我可以按照高級配置頁面( 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查詢正在尋找父類。 有人讓這個工作嗎?

我不確定在列表視圖中這些“子類”的含義,但是如果您要添加另一個實體(通過外鍵與您的外鍵連接)中的字段,則可以這樣做:

$listMapper
    ->addIdentifier('id')
    ->addIdentifier('title')
    ->add('name')
    ->add('entity1.customField1')
    ->add('entity2.customField2');

萬一其他人面臨這個問題,我就知道如何做到這一點。

要使其以類似於編輯頁面的方式工作,您可以在url中傳遞子類

...list?subclass=MySubClass

在自定義admin 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,FilterForm和batchActions表單(或其他出現在列表視圖中)

<?php
class YourAdmin extends Admin
{
    public function getPersistentParameters()
    {
        if (!$this->getRequest()) {
            return array();
        }

        return array(
            'subclass' => $this->getRequest()->get('subclass'),
        );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM