2017-05-05 42 views
-1

我想編輯通過形式的實體:正確的項目在樹枝選用了經過編輯的形式(symfony的)

public function editerOffreAction($slug, Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $offre = $em->getRepository('AppBundle:Offre')->findOneBySlug($slug); 


    $form = $this->createForm(OffreType::class, $offre); 

    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     $em->persist($offre); 
     $em->flush(); 
     return $this->redirectToRoute('app_lister_echanges_utilisateur'); 
    } 

    return $this->render('AppBundle/Utilisateur/editer.offre.html.twig', array(
     'form' => $form->createView(), 
     )); 

} 

的形式如下:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
    ->add('type', EntityType::class, array(
        'class' => 'AppBundle:Sources\TypeIntervenant', 
        'choice_label' => 'nom', 
        'placeholder' => 'choose a type of worker', 
        )); 
// I m showing only the field that is important 
} 

實體的appbundle:來源\ TypeInterant包含兩個值:profesionnal和not profesional。

現在的問題:當我渲染樹枝視圖,字段類型是佔位符,即使類型choosen在實體:

<div class="form-group"> 
    {{ form_label(form.type) }} 
    {{ form_widget(form.type) }} 
    {{ form_errors(form.type) }} 
    </div> 

我怎樣才能使包含的值的字段類型當我編輯它的實體?

我想:

<div class="form-group"> 
    {{ form_label(form.type) }} 
    {{ form_widget(form.type, { 'value' : '1' }) }} 
    {{ form_errors(form.type) }} 
    </div> 

但我希望值是在實體的實際價值! 非常感謝您的幫助!

編輯1:這裏是兩個實體的代碼(我puting只有相關的信息作爲offre實體長)

實體 「offre」:

<?php 

namespace AppBundle\Entity; 

use Gedmo\Mapping\Annotation as Gedmo; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Offre 
* 
* @ORM\Table(name="offre") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\OffreRepository") 
*/ 
class Offre 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

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

    /** 
    * @var string 
    * 
    * @ORM\Column(name="type", type="string", length=25) 
    */ 
    private $type; 

    // AND ALL OTHER FIELDS 
    //ETC ... 


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

    /** 
    * Set titre 
    * 
    * @param string $titre 
    * 
    * @return Offre 
    */ 
    public function setTitre($titre) 
    { 
     $this->titre = $titre; 

     return $this; 
    } 

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

    /** 
    * Set type 
    * 
    * @param string $type 
    * 
    * @return Offre 
    */ 
    public function setType($type) 
    { 
     $this->type = $type; 

     return $this; 
    } 

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

// AND OTHER SETTERS AND GETTERS FOR THE OTHER FIELDS ... 

} 

實體 「TypeIntervenant」

<?php 

namespace AppBundle\Entity\Sources; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* TypeIntervenant 
* 
* @ORM\Table(name="c_type_intervenant") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\TypeIntervenantRepository") 
*/ 
class TypeIntervenant 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="nom", type="string", length=20) 
    */ 
    private $nom; 


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

    /** 
    * Set nom 
    * 
    * @param string $nom 
    * 
    * @return TypeIntervenant 
    */ 
    public function setNom($nom) 
    { 
     $this->nom = $nom; 

     return $this; 
    } 

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

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

編輯2:這裏是形式的轉儲,當我編輯:

enter image description here

編輯3:

我想要去選擇的解決方案,所以我嘗試:

->add('type', ChoiceType::class, array(
    'choices' => $this->getTypeTarifications(), 
    )) 

創建於形式的私有函數:

private function getTypeTarifications() 
{ 
    $choices = $this->em->getRepository('AppBundle:Sources\TypeTarification')->findAll(); 
    return ($choices); 

} 

但不起作用!

+0

你確定與TypeIntervenant的關係是否已保存?顯示傾銷實體Offre的樣子。 – miikes

+0

請發佈兩個實體全班 – ste

回答

1

你的字段類型應該是一個關係:

/** 
* @var TypeIntervenant 
* 
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Sources\TypeIntervenant") 
*/ 
protected $type; 

則:

$builder->add('type'); 

注:表格類型和類選項,則沒有必要,是解決自動基於關係

+0

謝謝。但是我想要從表中獲得一個包含信息的選擇項。我應該建立第二個表/實體來提供列表嗎? – zskiredj

+0

我的意思是:我如何知道我想從表格數據庫中獲取該列表的類型字段中的項目列表。謝謝! – zskiredj

+0

是的,使用上面的方法,TypeIntervenant是其他實體,另一個表與記錄列表。在這種情況下,需要在數據庫中手動添加每種類型以便稍後使用,這通常在類型爲動態時應該由應用程序邏輯控制。 – rafrsr