Je suis en train d'obtenir le prototype de collection d'avoir un ensemble de valeurs par défaut au lieu de valeurs vides. Idéalement, je voudrais être en mesure de définir ces valeurs par défaut quelque part, soit dans la classe modèle ou la classe de définition de forme, mais je ne peux pas trouver un moyen de le faire partout
A titre d'exemple:. P>
« ai créé un AbstractType pour ma forme qui contient une collection imbriquée de lignes individuelles (code correspondant ci-dessous): p>
...
<tr>
<td> {{ form_widget(person.name) }} </td>
{# THIS DOES NOT WORK (I just get the default selected date) #}
<td> {{ form_widget(person.date_of_birth, {'value': person.date_of_birth.get('value')|default({'year':2010, 'month':10, 'day':15})} }} </td>
{# THIS WORKS (the field contains '0' instead of being empty) #}
<td> {{ form_widget(person.age, {'value': person.age.get('value')|default(0)} }} </td>
</tr>
...
protected $ age = 10; code> dans la classe modèle), ou bien dans la classe définition de forme (AbstractType) (p.ex. réseau ( 'empty_value' => new DateTime ()), mais ne sont actuellement pas possible. li>
Ul> Donc, en résumé, ma question est: p>
Comment puis-je définir des valeurs par défaut pour une classe de modèle qui sera mis automatiquement sur le client lors de l'ajout de nouveaux éléments à une forme « collection » (au lieu de simplement obtenir des blancs). p>
quelqu'un sait-il d'une bonne façon de le faire? p> p>
3 Réponses :
peut être
Malheureusement cela n'a pas fonctionné. Il semble que $ Builder-> setingdata (...) code> prend un seul argument contenant une instance de la classe mappée sur ce type de formulaire (c'est-à-dire défini dans data_class code> dans getDefaultOptions code>). Cette instance est ensuite utilisée comme défaut pour le formulaire. J'ai résolu mon problème en initialisant simplement ma classe d'entité avec des valeurs par défaut.
Dans le constructeur de l'entité selon laquelle le formulaire est utilisé, vous définissez simplement la date avec un objet \ DateTime, comme: Vous pouvez également utiliser \ DateTime (' Maintenant ') ou \ DateTime (' demain '), comme décrit dans la discussion ci-dessous P> http:/groups.google.com/group/symfony2/browse_thread/thread/18a5b20aca485dc4/e9947d0f06d6519d p> EDIT STRY>: , ces informations sont dans la documentation Symfony2: p> http://symfony.com/doc/2.0/book/forms.html#building-Leform p> p>
C'est exactement ce que j'ai fini par faire et fonctionne parfaitement. Merci!
avec symfony> 2.0 Ce n'est pas possible. P>
Symfony 2.0 a récupéré les valeurs du prototype de l'objet sous-jacent afin que les paramétrer dans le constructeur modifiait également les valeurs du prototype. Toutefois, ce comportement a été modifié avec Symfony 2.1 qui a supprimé cette fonctionnalité, ce qui vous empêche de la possibilité de définir des valeurs par défaut pour le prototype: p>
Je pense que définir une valeur par défaut pour le prototype n'est alors pas possible en ce moment. --Webmozart, symfony collaborateur ( https://github.com/symfony/symfony/issues/5087 < / a>) p> blockQuote>
Il y a un Ouvrir un bug sous Développement actif qui devrait ajouter de la prise en charge d'un
Data_Prototype code> option. En utilisant cette option, il sera possible de fournir des données pour pré-remplissez le prototype. Cependant, cela sera probablement libéré pas plus tôt que par symfony 2.7. P>
$ Builder-> Ajouter ("Articles ', CollectionType :: Classe, Array (" EntryPe' => ItemType :: Classe, 'Autoriser_add' => true, "allow_delete '=> vrai," prototype' => vrai , 'prototype_data' => nouvel élémentData (),)) code>