8
votes

Symfony2 - Valeurs par défaut dans le prototype de collecte de formulaire

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>
...
  • Il semble que de travailler avec des types simples comme le texte et le numéro. Il ne fonctionne pas avec le type de date. Li>
  • de toute façon ne se sent pas comme la bonne approche. Je devrais être en mesure de définir une valeur par défaut / valeur vide soit dans le modèle sous-jacent (par exemple 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>


1 commentaires

$ Builder-> Ajouter ("Articles ', CollectionType :: Classe, Array (" EntryPe' => ItemType :: Classe, 'Autoriser_add' => true, "allow_delete '=> vrai," prototype' => vrai , 'prototype_data' => nouvel élémentData (),))


3 Réponses :


0
votes

peut être xxx


1 commentaires

Malheureusement cela n'a pas fonctionné. Il semble que $ Builder-> setingdata (...) 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 dans getDefaultOptions ). 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.



2
votes

Dans le constructeur de l'entité selon laquelle le formulaire est utilisé, vous définissez simplement la date avec un objet \ DateTime, comme: xxx

Vous pouvez également utiliser \ DateTime (' Maintenant ') ou \ DateTime (' demain '), comme décrit dans la discussion ci-dessous

http:/groups.google.com/group/symfony2/browse_thread/thread/18a5b20aca485dc4/e9947d0f06d6519d

EDIT : , ces informations sont dans la documentation Symfony2:

http://symfony.com/doc/2.0/book/forms.html#building-Leform


1 commentaires

C'est exactement ce que j'ai fini par faire et fonctionne parfaitement. Merci!



0
votes

avec symfony> 2.0 Ce n'est pas possible.

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:

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>)

Il y a un Ouvrir un bug sous Développement actif qui devrait ajouter de la prise en charge d'un Data_Prototype 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.


0 commentaires