8
votes

Symfony2 FosresRestBundle Formulaire d'action Retourne les résultats vides

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> xxx pré>

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';
    }
}


2 commentaires

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


4 Réponses :


0
votes

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


0 commentaires

8
votes

Essayez de changer la ligne suivante dans la pute: xxx

à: xxx


4 commentaires

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 ()) { était faux et $ errors = $ Form-> getterrors (); é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.



0
votes

voir http://symfony.com/doc/current/cookbook/strouting /method_parameters.html

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.

et http: // symfony .com / doc / actuel / livre / formulaires.html # Book-Formulaires-changeant-action-action-action-action-action

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.


2 commentaires

Je ne vois pas comment cela présente une solution au problème.


Cela explique pourquoi vous devez mettre "méthode" => "mettre" comme param dans le formulaire de création, pour simuler le comportement "Mettre" dans WebBrowersers ....



6
votes

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"}


0 commentaires