Formulaire de Symfony champ en lecture seule
Comment dois-je me rendre read-only
champs à l'aide de composant formulaire de Symfony?
C'est de cette façon que je suis en train de le faire en vain:
Symfony 2
$builder
->add('descripcion', 'text', array(
'read_only' =>'true'
));
}
Symfony 3
$builder
->add('descripcion', TextType::class, array(
'read_only' => 'true'
));
}
- si une réponse est la solution pour résoudre ce problème, veuillez marquer comme acceptée 🙂
Vous devez vous connecter pour publier un commentaire.
Fourni des réponses à toutes les fin de cette exception sur Symfony 3:
La bonne façon de le faire est de profiter de
attr
de propriété sur le terrain:descripcion
si la demande inclut. De sorte qu'il donne aux auteurs un faux sentiment de sécurité.security
chose. Vous devez gérer voussecurity
à côté serveur. Si vous avez un problème avec Symfony, vous pouvez aller sur leur Github compte et de soumettre un problème là.Vous avez déclaré votre attribut lecture seule à une chaîne de caractères, il doit être une valeur booléenne.
supprimer les guillemets autour de
true
comme ceci:
vrai, sans les guillemets.
Je pense que la seule méthode sûre à présent un champ de formulaire en readonly et aussi de prévenir de votre formulaire d'accepter une nouvelle valeur dans une demande est le suivant.
La suggestion d'autres de l'aide, soit
['attr' => ['readonly' => true]]
ou['attr' => ['disabled' => true]]
va vous laisser vulnérable à la falsification des demandes.Ces deux options de jeu soit
readonly
oudisabled
attributs sur le terrain, mais votre Formulaire continuent d'accepter une nouvelle valeur pour ce champ si inclus dans la demande.Que la première option ci-dessus permettra à la fois de désactiver le champ de formulaire et aussi de prévenir de votre Formulaire d'accepter une nouvelle valeur pour le champ de la demande.
J'ai testé cela avec Formulaire de Symfony 3.4. Je ne sais pas si 4 se comporte de la même.
read_only est obsolète depuis Symfony 2.8. Veuillez utiliser readonly à la place. Et de fournir boolean valeur pour cet attribut
Mise à jour: depuis Symfony 3.0, le readonly valeur doit être définie dans le attr option.
http://symfony.com/doc/2.8/reference/forms/types/form.html#read-only
La désactivé option peut également être utilisée à la place.
Symfony 4 permet d'utiliser uniquement des "handicapés" option dans le champ de formulaire. Mais c'est quelque chose de différent que "readonly".
Seule solution que j'ai trouvé pour "readonly" est:
Vous recommandons d'utiliser l'option désactivée, car soumise à valeur sera ignorée par les docs: https://symfony.com/doc/current/reference/forms/types/text.html#disabled
readonly
et pasread_only
. Il est recommandé de faire cette option dansattr
comme ceci:Si familia et proveedor sont les relations à l'autre entité, je pense qu'ils ne devraient pas être de type texte. Essayez d'annuler leurs types ou de modifier à entité type et de vérifier si cela a fonctionné.
Permettez-moi d'ajouter quelque chose que les autres réponses ne l'a pas aidé à gérer. Le traitement en tant que champ de mais "bidouiller" pour désactiver l'édition peuvent travailler dans de nombreux cas. Cependant, c'est au moins difficile à rendre dans certains des formats complètement empêcher l'édition (c'est à dire, le rendu d'une étiquette).
Comment résoudre ce problème? Ce que j'ai fait est de définir le champ comme HiddenType, et dans le modèle, le rendu à l'aide de
{{ form.vars.value.myfield }}
ou{{ item.myfield }}
prendre "item" comme l'entité objet, enfermé dans ce que vous pouvez penser, comme tout autre élément HTML.Autre solution pourrait être:
Prises à partir de: http://symfony.com/doc/current/reference/forms/types/text.html#disabled
Seulement désactivé l'option de ne pas provoquer une erreur
Pour un entitytype champ désactivé fonctionne très bien