Quantcast
Channel: Le Coin Du Codeur » entity_manager
Viewing all articles
Browse latest Browse all 2

Passer l’EntityManager en paramètre d’un formulaire Symfony2

0
0

Lors du développement d’une application Symfony2 multibases de données, on peut être amené à devoir transmettre un EntityManager particulier à un formulaire, pour l’affichage des données.

Tout se passe dans le fichier php du formulaire concerné, dans notre cas CustomElemFormType.php.

L’opération va consister à définir manuellement les paramètres à passer au formulaire. Pour cela, il suffit d’ajouter les deux méthodes suivantes :

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array('data_class' => 'CDC\TestBundle\Entity\CustomElem'));
    $resolver->setRequired(array('em'));
}
    
public function getDefaultOptions(array $options)
{
    return array('data_class' => 'CDC\TestBundle\Entity\CustomElem',
    		'em' => null,);
}

La première méthode va permettre de définir le paramètre em, correspondant à l’EntityManager, comme paramètre requis lors de l’appel au formulaire.

La deuxième permet de retourner une valeur par défaut lors de la lecture des paramètres du formulaire.

Il reste encore à utiliser ce paramètre dans la déclaration des champs du formulaire. Voici le code complet :

namespace CDC\TestBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class CustomElemType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        // Récupération de l'EntityManager passé en paramètre
    	$em = $options['em'];
    	
        $builder->add('category','entity', array('class' => 'CDC\TestBundle\Entity\Category',
                                                 'property'=>'description',
                                                 // L'utilisation de l'EntityManager permet de cibler une base particulière
            					 'em' => $em,
                                                 'label'  => 'Catégorie',));
    }
    
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
    	$resolver->setDefaults(array('data_class' => 'CDC\TestBundle\Entity\CustomElem'));
    	$resolver->setRequired(array('em'));
    }
    
    public function getDefaultOptions(array $options)
    {
    	return array('data_class' => 'CDC\TestBundle\Entity\CustomElem',
    		     'em' => null,);
    }
    
    public function getName()
    {
        return 'cdc_testbundle_customelemtype';
    }
}

Voilà notre formulaire est prêt. Il ne reste plus qu’à l’utiliser dans le contrôleur adéquat :

$form = $this->createForm(new CustomElemType, $customElem, array('em' => $managerName));

Voilà, maintenant c’est à vous …

 

A bientôt !


Viewing all articles
Browse latest Browse all 2

Latest Images





Latest Images