2016-06-13 96 views
0

我试图用奏鸣曲表单添加类别。我的表类别中我的数据库看起来是这样的:奏鸣曲类型模型 - 父类别

enter image description here

表包含:

  • ID
  • 启用
  • parent_category_id

parent_category_id可以为空。所以我想有一个选择列表,你可以选择一个父类别。但是我对创建这个有点困惑。我的实体类别看起来是这样的:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Category 
* 
* @ORM\Table(name="category", indexes={@ORM\Index(name="fk_category_category_idx", columns={"parent_category_id"})}) 
* @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository") 
*/ 
class Category 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=false) 
    */ 
    private $name; 

    /** 
    * @var boolean 
    * 
    * @ORM\Column(name="enabled", type="boolean", nullable=false) 
    */ 
    private $enabled = true; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var \AppBundle\Entity\Category 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="parent_category_id", referencedColumnName="id") 
    * }) 
    */ 
    private $parentCategory; 

    public function __toString() 
    { 
     return $this->getName(); 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Category 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set enabled 
    * 
    * @param boolean $enabled 
    * 
    * @return Category 
    */ 
    public function setEnabled($enabled) 
    { 
     $this->enabled = $enabled; 

     return $this; 
    } 

    /** 
    * Get enabled 
    * 
    * @return boolean 
    */ 
    public function getEnabled() 
    { 
     return $this->enabled; 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set parentCategory 
    * 
    * @param \AppBundle\Entity\Category $parentCategory 
    * 
    * @return Category 
    */ 
    public function setParentCategory(\AppBundle\Entity\Category $parentCategory = null) 
    { 
     $this->parentCategory = $parentCategory; 

     return $this; 
    } 

    /** 
    * Get parentCategory 
    * 
    * @return \AppBundle\Entity\Category 
    */ 
    public function getParentCategory() 
    { 
     return $this->parentCategory; 
    } 
} 

这是我至今无父类中进行选择:

<?php 

// src/AppBundle/Admin/CategoryAdmin.php 
namespace AppBundle\Admin; 

use AppBundle\Repository\CategoryRepository; 
use Sonata\AdminBundle\Admin\AbstractAdmin; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Form\FormMapper; 

class CategoryAdmin extends AbstractAdmin 
{ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('name', 'text') 
      ->add('enabled', 'checkbox'); 
    } 

    protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
    { 
     $datagridMapper->add('name'); 
    } 

    protected function configureListFields(ListMapper $listMapper) 
    { 
     $listMapper 
      ->addIdentifier('name'); 
    } 
} 

但现在我卡与添加父类别中选择(这不需要选择)。

+0

首先,请注明,你想在哪儿这种选择?作为列表视图中的过滤器?或者在编辑视图? – lllypa

回答

1

你有没有尝试过这样的:

protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    $datagridMapper 
     ->add('name') 
     ->add('parentCategory') 
     ; 
} 

基本上,索纳塔将处理类型,期权等表单域本身,如果你的实体被正确配置。所以,只需添加属性“parentCategory”应该添加parentCategory过滤器并创建与所有现有类别的下拉菜单。

但是,说实话,你的问题应该minused,因为它听起来像你没能读索纳塔管理文档:https://sonata-project.org/bundles/admin/master/doc/index.html