2016-06-13 9 views
0

Ich versuche, Kategorien mit einer Sonatenform hinzuzufügen. Mein Tisch Kategorie in meiner Datenbank wie folgt aussieht:Sonatentyp Modell - Übergeordnete Kategorie

enter image description here

Die Tabelle enthält:

  • id
  • Name
  • parent_category_id
  • aktiviert

Die parent_category_id kann null sein. Ich hätte also gerne eine Auswahlliste, in der Sie eine Elternkategorie auswählen können. Aber ich bin ein bisschen davon abhängig, wie ich das schaffen soll. Meine Einheit Kategorie sieht wie folgt aus:

<?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; 
    } 
} 

Dies ist, was ich bisher ohne die übergeordnete Kategorie wählen:

<?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'); 
    } 
} 

Aber jetzt bin ich fest mit dem Hinzufügen der Hauptkategorie auswählen (die muss nicht ausgewählt werden).

+0

Zunächst einmal bitte angeben, wo Sie diese Auswahl wollen? Als Filter in der Listenansicht? Oder in der Bearbeitungsansicht? – lllypa

Antwort

1

Haben Sie versucht:

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

Grundsätzlich wird Sonata Typen handhaben, Optionen usw. für Formularfeld selbst wenn Ihr Unternehmen richtig konfiguriert ist. Wenn Sie also die Eigenschaft "parentCategory" hinzufügen, sollten Sie einen Filter nach parentCategory hinzufügen und ein Dropdown-Menü mit allen vorhandenen Kategorien erstellen.

Aber, ehrlich gesagt, Ihre Frage minused werden sollte, da es klingt wie Sie nicht Dokumentation lesen Sonata Admin kam an: https://sonata-project.org/bundles/admin/master/doc/index.html

Verwandte Themen