Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    32

    Symfony2 validazione ajax

    Salve, è da qualche giorno che sto cercando di capire come avviene la validazione ajax in symfony2.
    Con una richiesta normale mi basta usare bindRequest per settare i valori degli input e poi verificare se sono validi, ma con una richiesta ajax come posso fare? C'è anche qui un modo per settare i valori degli input e verificare se sono validi tramite $form->isValid() ?
    Fino ad ora il massimo che sono riuscito a fare è stato prelevare i valori dei campi uno ad uno con $request->get('campo') e verificare se erano validi, ma non mi sembra molto elegante, preferirei venisse fatto in modo automatico utilizzando i parametri di validation.yml.

    Come fare?

  2. #2
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Parli di validare i singoli campi uno per uno, oppure di validarli tutto insieme?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    32
    Tutti insieme

  4. #4
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    allora non capisco che difficoltà hai: in che modo una richiesta ajax è diversa da una richiesta "normale"?

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    32
    Non so, molto probabilmente sbaglio qualcosa io perchè non mi sono chiare le richieste ajax. Quando invio il form mi da sempre il messaggio "This value should not be blank" anche se compilo tutti i campi.
    Il controller è questo:
    Codice PHP:
        public function registrationAction()
        {
            
    $user = new User();
            
    $form $this->createForm(new UserType(), $user);
            
            
    $request $this->getRequest();
            if (
    $request->isXmlHttpRequest()) {
                
    $form->bindRequest($request);
                
                if (
    $form->isValid()) {
                    return 
    $this->render('AcmeTestsBundle:Site:registration-success.html.twig');
                }
            }
            
    /* if ($request->getMethod() == 'POST') {
                $form->bindRequest($request);
                
                if ($form->isValid()) {
                    $em = $this->getDoctrine()->getEntityManager();
                    $em->getRepository('AcmeTestsBundle:User')->createUser($user);
                    
                    return $this->redirect($this->generateUrl('AcmeTestsBundle_registration_success'));
                }
            } */
            
            
    return $this->render('AcmeTestsBundle:Site:registration.html.twig', array(
                
    'form' => $form->createView(),
            ));
        } 
    Lo script jQuery questo:
    codice:
    <script>
        $().ready(function() {
            $("#registration-form").submit(function() {
                $.ajax({
                    type: "POST",
                    url:  "http://localhost/Symfony/web/app_dev.php/tests/registration",
                    data: {
                        'username'       : $("#user_username").val(),
                        'email'          : $("#user_email").val(),
                        'passwordFirst'  : $("#user_password_first").val(),
                        'passwordSecond' : $("#user_password_second").val(),
                    },
                    success: function(response){
                            $("#reg").html(response);
                    }
                });
                return false;
            });
            $("#ajax_loader").bind("ajaxSend", function(){
                $(this).show();
            })
            .bind("ajaxComplete", function(){
                $(this).hide();
            });
        });
    </script>
    C'è quelcosa di sbagliato?

  6. #6
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    il form ha il csrf attivo?
    Perché mandi i singoli campi del form e non tutti i valori del form insieme?
    Tra l'altro mi sa che stai sbagliando i nomi dei valori che invii, di solito sono nella forma pippo[nomecampo] e non solo nomecampo. Se comunque mandassi tutti i valori, ti toglieresti questo problema: puoi usare form.serializeArray() dentro $.ajax
    E poi: non hai bisogno di specificare POST in $.ajax, è il default, e non dovresti hardcodare l'action del form, ce l'hai tra le proprietà del form stesso

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    32
    il form ha il csrf attivo?
    se intendi il token nascosto si, c'è
    Perché mandi i singoli campi del form e non tutti i valori del form insieme?
    Tra l'altro mi sa che stai sbagliando i nomi dei valori che invii, di solito sono nella forma pippo[nomecampo] e non solo nomecampo. Se comunque mandassi tutti i valori, ti toglieresti questo problema: puoi usare form.serializeArray() dentro $.ajax
    In che senso mandare tutti i campi insieme? come posso fare?
    E poi: non hai bisogno di specificare POST in $.ajax, è il default, e non dovresti hardcodare l'action del form, ce l'hai tra le proprietà del form stesso
    Quindi "type" e "url" posso toglierli?

  8. #8
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    come ho detto, usa form.serializeArray().
    type puoi toglierlo, url no: ma puoi usare come valore form.attr('action')

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    32
    Ora funziona, grazie mille.
    Però adesso ho notato che se i campi sono sbagliati mi restituisce tutta la pagina e non solo gli errori. In pratica nel div dove fornisco la risposta (#reg) al posto di aggiornare solo il form con gli errori mi sostituisce tutto il contenuto del div con l'intera pagina html. Come mai?

  10. #10
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Originariamente inviato da marco_rx
    Ora funziona, grazie mille.
    Però adesso ho notato che se i campi sono sbagliati mi restituisce tutta la pagina e non solo gli errori. In pratica nel div dove fornisco la risposta (#reg) al posto di aggiornare solo il form con gli errori mi sostituisce tutto il contenuto del div con l'intera pagina html. Come mai?
    perché hai messo il render dell'ajax sotto la condizione che il form sia valido

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.