Comment personnaliser le rendu d'un formulaire symfony?
Bonjour,j'ai deux entités avec une relation ManyToOne et donc voila j'aimerai personnaliser le rendu du formulaire en accédant à tous les labels et les widgets respectifs de l'entité inverse en fait le formulaire devra être un tableau,j'ai déjà consulté un sujet similaire à ceci mais je n'ai pas bien compris alors si quelqu'un pourrait m'aider,s'il vous plait,ce sera vraiment un grand aide merci d'avance
quelques modifs sont nécéssaires...
Salut,
Petit exemple avec ManyToOne sur une table categories et table produits clef étrangère (id_categorie)
IL faut déclarer les setter getter et l'id de la categorie dans la classe produits dans :
MyNameSpace\MyBundle\Entity\Produit.php
Après la génération de mon entity Produit via CLI :
php app/console doctrine:generate:entities
Tu modifie ton object Produit qui a été généré dans ton bundle dans :
MyNameSpace\MyBundle\Entity\Produit.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
/**
* @ORM\ManyToOne(targetEntity="Categorie")
*/
private $Categorie;
private $categorie_id;
/**
* @return mixed
*/
public function getCategorie(){
return $this->Categorie;
}
/**
* @param $categorie
*/
public function setCategorie($categorie){
$this->Categorie = $categorie;
return $this;
}
/**
* @return mixed
*/
public function getCategorie_id(){
return $this->categorie_id;
} |
Le defaultController du bundle sur lequel tu bosse *.php
Observe bien le add('categorie' ...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
namespace MyNameSpace\MyBundle\Controller;
use MyNameSpace\MyBundle\Entity\Categorie;
use MyNameSpace\MyBundle\Entity\Produit;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\Fram Exemple avec ManyToOne
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\BrowserKit\Request;
class DefaultController extends Controller
{
/**
* @Route("/addProduit")
* @Template()
*/
public function addProduitAction(\Symfony\Component\HttpFoundation\Request $request)
{
$p = new Produit();
$form = $this->createFormBuilder($p)
->add('nomProduit', 'text')
->add('prix', 'text')
->add('categorie', 'entity', array(
'class' => 'MyNameSpace\MyBundle\Entity\Categorie',
'property' => 'nomCategorie'
))
->add('Add', 'submit')
->getForm();
$form->handleRequest($request);
if($form->isValid()){
$em = $this->getDoctrine()->getManager();
$em->persist($p);
$em->flush();
}
$produits = $this->getDoctrine()->getRepository("MyNameSPaceMyBundle:Produit")->findAll();
return array('f' => $form->createView(), 'prods' => $produits);
}
... |
fait un update du mapping de doctrine :
php app/console doctrine:schema:update
Pour la vue il suffit de créer la vue de l'action que l'on a créé dans le defaultController, exemple avec twig
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
{% extends '::base.html.twig' %}
{% block body %}
{{ form_start(f) }}
<ul style="list-style:none;">
<li>
<ul style="list-style:none;">
<li>{{ form_label(f.nomProduit) }}</li>
<li>{{ form_widget(f.nomProduit) }}</li>
<li>{{ form_errors(f.nomProduit) }}</li>
</ul>
</li>
<li>
<ul style="list-style:none;">
<li>{{ form_label(f.prix) }}</li>
<li>{{ form_widget(f.prix) }}</li>
<li>{{ form_errors(f.prix) }}</li>
</ul>
</li>
<li>
<ul style="list-style:none;">
<li>{{ form_label(f.categorie) }}</li>
<li>{{ form_widget(f.categorie) }}</li>
<li>{{ form_errors(f.categorie) }}</li>
</ul>
</li>
</ul>
{{ form_end(f) }}
</br></br>
{% include '@DwmCatalog/Default/listProduits.html.twig' %}
<script> |
Je pense que c'est tout, en espérant que c'est claire pour toi, bonne journée.