J'utilise Symfony 2.2 et la dernière version de Fosrestresbundle. Je parle donc de faire la majeure partie des actions de travailler, mais je semble avoir un problème avec le formulaire de formulaire que je transmettais la demande de mon appel de mon appel.
J'ai vérifié l'objet de la demande et il vient de mon backbone.je Modèle comme il se doit (.save ()) mais après la liaison au formulaire, l'entité revient avec uniquement l'ID qui provoque une erreur () pour lancer une erreur car les champs requis ne sont pas remplis. P>
L'action dans le contrôleur:
p> Le formulaire appelé: p>
P> namespace Greenthumbed\ApiBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class ContainerType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('description')
->add('isVisible')
->add('type')
->add('size')
->add('creationDate')
->add('userId')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Greenthumbed\ApiBundle\Entity\Container',
'csrf_protection' => false,
));
}
public function getName()
{
return 'greenthumbed_apibundle_containertype';
}
}
4 Réponses :
Utilisez le Paramconverter pour que votre entité soit injectée en tant que argument dans votre méthode automatiquement.
use Greenthumbed\ApiBundle\Entity\Container; // ... public function putAction(Request $request, Container $container) { $form = $this->createForm(new ContainerType(), $container); $form->bind($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); // Entity already exists -> no need to persist! // $em->persist($entity); $em->flush(); return $this->view(null, Codes::HTTP_NO_CONTENT); } return array('form' => $form); }
Essayez de changer la ligne suivante dans la pute: à: p>
Travaillé pour moi avec Symfony 2.6 et Fosrestresbundle 1.5. Où dans la documentation est-il mentionné?
même problème, comment vous avez corrigé?
J'utilise Symfony 2.7 et Fosrestresbundle 1.7. Mon formulaire si ($ formulaire-> isvalid ()) { code> était faux et
$ errors = $ Form-> getterrors (); code> était vide. Modification du type de méthode sur 'Met' Correction du problème.
+1 J'avais des problèmes avec des demandes de vente de Symfony 2.8.2 et de Fosrestresbundle 1.7 - cela m'a fixé pour moi.
voir http://symfony.com/doc/current/cookbook/strouting /method_parameters.html p>
Malheureusement, la vie n'est pas tout à fait aussi simple, car la plupart des navigateurs font Ne pas prendre en charge l'envoi de demandes de vente et de suppression. Heureusement, symfony2 Vous fournit un moyen simple de travailler autour de cette limitation. Par y compris un paramètre _method dans la chaîne de requête ou les paramètres d'un Demande HTTP, Symfony2 utilisera ceci comme méthode lors de la correspondance. itinéraires. Les formulaires incluent automatiquement un champ masqué pour ce paramètre Si leur méthode de soumission ne reçoit pas ou post. Voir le chapitre associé dans la documentation des formulaires pour plus d'informations. P> blockQuote>
Si la méthode du formulaire n'est pas ou post, mais mettre, patch ou supprimer, Symfony2 insérera un champ caché avec le nom "_method" que stocke cette méthode. Le formulaire sera soumis dans un poste normal Demande, mais le routeur de Symfony2 est capable de détecter le "_method" paramètre et interprétera la demande sous forme, patch ou supprimer demande. Lire le chapitre du livre de recettes "Comment utiliser les méthodes HTTP au-delà d'obtenir et post dans les itinéraires "pour plus d'informations. P> blockQuote>
Je ne vois pas comment cela présente une solution au problème.
Cela explique pourquoi vous devez mettre "méthode" => "mettre" code> comme param dans le formulaire de création, pour simuler le comportement "Mettre" dans WebBrowersers ....
Je pense que vous rencontrez le même problème que j'avais: L'erreur est au nom du formulaire.
dans votre définition de formulaire, le nom est "Greréthumbed_apibundle_containetype". Fonction publique getname () { retourner "Greréthumbed_apibundle_containtainerype"; } p>
afin de lier une demande à ce formulaire, le JSON aurait dû ressembler à ceci: P>
"something":{"key":"value"}
Pourquoi utilisez-vous un type de formulaire dans l'action mise en place? Vous auriez besoin d'un validateur là-bas pour la validation du côté serveur. Votre demande de clientèle devrait traiter des trucs de formulaire. Toutefois, faites une var_dump (Demande $) ou utilisez la barre d'outils de débogage pour voir si les valeurs sont en réalité.
Avez-vous réussi à résoudre le problème ????, j'ai le même problème: o