2016-12-21 7 views
0

私はSymfonyをどのように一緒に使いこなせるかを試しています。私は管理セクションで作業しています。Symfony管理フォームに保存する関連エンティティフィールドを取得できません

今私はセクションエンティティを参照するショーエンティティの管理フォームをまとめています(このショーはそのセクションに属していますなど)。フォームの他のすべてのフィールドは、関連するエンティティー選択フィールドのEXCEPTを保存します。

この

はShowAdminクラス

<?php 

namespace AppBundle\Admin; 

use Sonata\AdminBundle\Admin\AbstractAdmin; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Form\FormMapper; 
use Nelmio\ApiDocBundle\Tests\Fixtures\Form\EntityType; 

class ShowAdmin extends AbstractAdmin { 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper->add('title', 'text') 
        ->add('shortname', 'text') 
        ->add('section_id', EntityType::class, array(
         'class' => 'AppBundle:SectionEntity', 
         'choice_label' => 'section_title', 
        )) 
        ->add('logo', 'text') 
        ->add('description', 'textarea') 
        ->add('status', 'integer'); 
    } 

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

    protected function configureListFields(ListMapper $listMapper) 
    { 
     $listMapper->addIdentifier('title'); 
     $listMapper->add('shortname', 'text'); 
    } 
} 

これはShowEntity

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="shows") 
*/ 
class ShowEntity { 

    function __construct() { 
     $this->children = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 


    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    private $title; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    private $shortname; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\SectionEntity") 
    */ 
    private $section; 

    /** 
    * @ORM\Column(type="string", length=255) 
    */ 
    private $logo; 

    /** 
    * @ORM\Column(type="text") 
    */ 
    private $description; 

    /** 
    * @ORM\Column(type="integer") 
    */ 
    private $status; 


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

    /** 
    * Set title 
    * 
    * @param string $title 
    * 
    * @return ShowEntity 
    */ 
    public function setTitle($title) 
    { 
     $this->title = $title; 

     return $this; 
    } 

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

    /** 
    * Set sectionId 
    * 
    * @param integer $sectionId 
    * 
    * @return ShowEntity 
    */ 
    public function setSectionId($sectionId) 
    { 
     $this->section_id = $sectionId; 

     return $this; 
    } 

    /** 
    * Get sectionId 
    * 
    * @return integer 
    */ 
    public function getSectionId() 
    { 
     return $this->section_id; 
    } 

    /** 
    * Set logo 
    * 
    * @param string $logo 
    * 
    * @return ShowEntity 
    */ 
    public function setLogo($logo) 
    { 
     $this->logo = $logo; 

     return $this; 
    } 

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

    /** 
    * Set description 
    * 
    * @param string $description 
    * 
    * @return ShowEntity 
    */ 
    public function setDescription($description) 
    { 
     $this->description = $description; 

     return $this; 
    } 

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

    /** 
    * Set status 
    * 
    * @param integer $status 
    * 
    * @return ShowEntity 
    */ 
    public function setStatus($status) 
    { 
     $this->status = $status; 

     return $this; 
    } 

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

    /** 
    * Set shortname 
    * 
    * @param string $shortname 
    * 
    * @return ShowEntity 
    */ 
    public function setShortname($shortname) 
    { 
     $this->shortname = $shortname; 

     return $this; 
    } 

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

であり、これはSectionEntity任意の助けをいただければ幸いです

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* SectionEntity 
* 
* @ORM\Table(name="section_entity") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\SectionEntityRepository") 
*/ 
class SectionEntity 
{ 

    protected $section_id; 

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

    /** 
    * @ORM\Column(type="text") 
    */ 
    private $section_title; 

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

    /** 
    * Set sectionTitle 
    * 
    * @param string $sectionTitle 
    * 
    * @return SectionEntity 
    */ 
    public function setSectionTitle($sectionTitle) 
    { 
     $this->section_title = $sectionTitle; 

     return $this; 
    } 

    /** 
    * Get sectionTitle 
    * 
    * @return string 
    */ 
    public function getSectionTitle() 
    { 
     return $this->section_title; 
    } 

    /** 
    * Get string 
    */ 
    public function __toString() { 
     return $this->section_title; 
    } 

    function __construct() { 
     $this->section_id = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

} 

ですが、私はそれはおそらく知っています私が見ていない超シンプルなもの。

ありがとうございました。

答えて

1
  1. (オプション)sectionsを強調するためにShowEntity::$sectionsShowEntity::$sectionの名前を変更するには、コレクションではなく、単一のエンティティです。
  2. 設定ShowEntity__constructメソッド本体:ShowAdmin::configureFormFields

    $this->sections = new \Doctrine\Common\Collections\ArrayCollection(); 
    
  3. は、あなたが代わりにidの関係への直接参照を使用する必要があります

    ->add('section', EntityType::class, array(
    

    ->add('section_id', EntityType::class, array(
    

    の名前を変更します。

  4. SectionEntity::__constructメソッドを削除しても意味がありません。
  5. protected $section_id;SectionEntityから削除します。
  6. public function setSectionId($sectionId)public function setSection(Section $section)に変更してください。
  7. おそらくsection_titleの名前をsectionTitleに変更するか、または単にtitleに変更する必要があります。
+0

遅延反応、クリスマスとすべてのおかげで申し訳ありません。一度試してみてください。 – purserj

+1

ありがとう、それはやっているようです。 – purserj

関連する問題