Come creare un semplice form Sign In ed ottenere i dati in JSon
Il template .twig in app/Resources/views/default/new.html.twig
1 2 3 4 | {# app/Resources/views/ default / new .html.twig #} {{ form_start(form) }} {{ form_widget(form) }} {{ form_end(form) }} |
L’entità in src/AppBundle/Entity/Person.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <?php // src/AppBundle/Entity/Person.php namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; // serve per @Assert\... class Person // dichiarazione esplicita dell'oggetto { // ------------------------------------------------------------------------- // Proprietà --------------------------------------------------------------- // ------------------------------------------------------------------------- /** * @Assert\NotBlank() */ public $name ; /** * @Assert\NotBlank() */ public $surname ; /** * @Assert\Email( * message = "The email '{{ value }}' is not a valid email.", * checkMX = true * ) */ public $email ; // ------------------------------------------------------------------------- // Metodi ------------------------------------------------------------------ // ------------------------------------------------------------------------- // NB metodi get e set obbligatori per permettere a 'Form component' di symfony di funzionare correttamente public function getName() // ottieni { return $this ->name; // assegna il valore che proviene dall'istanza $this-> } public function setName( $name ) // setta { $this ->name = $name ; } // ------------------------------------------------------------------------- public function getSurname() // ottieni { return $this ->surname; } public function setSurname( $surname ) // setta { $this ->surname = $surname ; } // ------------------------------------------------------------------------- public function getEmail() // ottieni { return $this ->email; } public function setEmail( $email ) // setta { $this ->email = $email ; } // ------------------------------------------------------------------------- } |
La classe SignIn in src/AppBundle/Controller/SignIn.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | <?php // src/AppBundle/Controller/SignIn.php namespace AppBundle\Controller; use AppBundle\Entity\Person; // carica Person.php creato da me use Symfony\Bundle\FrameworkBundle\Controller\Controller; // il bundle controller Symfont use Symfony\Component\HttpFoundation\Request; // capacità do renderizzare html use Symfony\Component\Form\Extension\Core\Type\TextType; // form di Symfony use Symfony\Component\Form\Extension\Core\Type\DateType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; // NECESSARIO per utilizzare @Route class SignIn extends Controller // estende la classe Controller di Symfony { /** * @Route("/signin") */ public function signInAction(Request $request ) { // creo il nuovo oggetto $person = new Person(); // 1. creo i contenuti HTML del form // invio Andrea, Tonin, andrea@email.it $form = $this ->createFormBuilder( $person ) ->add( 'name' , TextType:: class ) // il nome delle varibili è lo stesso di Person.php ->add( 'surname' , TextType:: class ) ->add( 'email' , TextType:: class ) ->add( 'save' , SubmitType:: class , array ( 'label' => 'Create Person' )) ->getForm(); // 3. riconosce che il form non è stato inviato e non fa nulla $form ->handleRequest( $request ); // 4. se il form è inviato AND valido if ( $form ->isSubmitted() && $form ->isValid()) { // $form->getData() holds the submitted values // but, the original `$person` variable has also been updated $person = $form ->getData(); // ottieni i dati dal form // debug START ###################################################### // Oggetto originale var_dump( $person ); // mostra l'oggetto var_dump( $person ->name); // mostra la varianbile name all'interno dell'oggetto // Conversione Json - NOTAZIONE JSON - è utile per trasportare i dati all'interno di una stringa $personJson = json_encode( $person ); // oggetto convertito in json format var_dump ( $personJson ); // mostra in json // Decodifica JSon - TORNA AD ESSERE UN OGGETTO $personDecoded = json_decode( $personJson ); var_dump ( $personDecoded ); var_dump( $personDecoded ->name); // mostra la varianbile name all'interno dell'oggetto // Dummy Data, instanzio la classe inviando dei dati di esempio $anotherPerson = new Person(); $anotherPerson ->name = "Erica" ; $anotherPerson ->surname = "Tonin" ; $anotherPerson ->email = "erica@email.it" ; // Array $people =[]; // creo un array di persone vuoto array_push ( $people , $anotherPerson ); // aggiungo id=0 dell'array array_push ( $people , $person ); // aggiungo id=1 dell'array var_dump ( $people ); // visualizza il contenuto dell'array var_dump ( $people [1]->name); // visualizzerà Andrea, array id 1 chiave name // altre operazioni con gli array // conta gli oggetti all'interno dell'array, visualizzerà 2 var_dump( count ( $people )); // renderizza tutto il contenuto dell'array di oggetti for ( $i = 0; $i < count ( $people ); $i ++) // conteggia tutto il contenuto { echo $i . " " . ( $people [ $i ]->name) . " " . ( $people [ $i ]->surname) . " " . ( $people [ $i ]->email) . "<br>" ; } // renderizza solo ad una particolare condizione for ( $i = 0; $i < count ( $people ); $i ++) // conteggia tutto il contenuto { if (( $people [ $i ]->name) === 'Erica' ) // se il valore è identico { echo 'La email di Erica è: ' . ( $people [ $i ]->email) . "<br>" ; } } die ( "Stop Here" ); // interrompi qui la funzione // debug END ######################################################## } // END validation // 2. Il form viene creato e renderizzato return $this ->render( 'default/new.html.twig' , array ( 'form' => $form ->createView(), )); } } // END class SignIn |
Puntare il browser a: http://localhost/symfonytest/first_test_symfony/web/signin
Inserire i dati ed inviare, verrà stampato a video:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | C:\wamp64\www\symfonytest\first_test_symfony\src\AppBundle\Controller\SignIn.php:45: object(AppBundle\Entity\Person)[316] public 'name' => string 'Andrea' (length=6) public 'surname' => string 'Tonin' (length=5) public 'email' => string 'andrea@email.it' (length=15) C:\wamp64\www\symfonytest\first_test_symfony\src\AppBundle\Controller\SignIn.php:46:string 'Andrea' (length=6) C:\wamp64\www\symfonytest\first_test_symfony\src\AppBundle\Controller\SignIn.php:49:string '{"name":"Andrea","surname":"Tonin","email":"andrea@email.it"}' (length=61) C:\wamp64\www\symfonytest\first_test_symfony\src\AppBundle\Controller\SignIn.php:52: object(stdClass)[390] public 'name' => string 'Andrea' (length=6) public 'surname' => string 'Tonin' (length=5) public 'email' => string 'andrea@email.it' (length=15) C:\wamp64\www\symfonytest\first_test_symfony\src\AppBundle\Controller\SignIn.php:53:string 'Andrea' (length=6) C:\wamp64\www\symfonytest\first_test_symfony\src\AppBundle\Controller\SignIn.php:65: array (size=2) 0 => object(AppBundle\Entity\Person)[372] public 'name' => string 'Erica' (length=5) public 'surname' => string 'Tonin' (length=5) public 'email' => string 'erica@email.it' (length=14) 1 => object(AppBundle\Entity\Person)[316] public 'name' => string 'Andrea' (length=6) public 'surname' => string 'Tonin' (length=5) public 'email' => string 'andrea@email.it' (length=15) C:\wamp64\www\symfonytest\first_test_symfony\src\AppBundle\Controller\SignIn.php:66:string 'Andrea' (length=6) C:\wamp64\www\symfonytest\first_test_symfony\src\AppBundle\Controller\SignIn.php:70:int 2 0 Erica Tonin erica@email.it 1 Andrea Tonin andrea@email.it La email di Erica è: erica@email.it Stop Here |
Come funziona?
1. Istanziata la classe $person = new Person(); e creato l’oggetto $person, vuoto, cone le sole chiavi.
2. Creato il form con il metodo di Symfony createFormBuilder()
3. Renderizzato il form con il metodo di Symfony return $this->render()
4. Invio i dati dal form, il metodo handleRequest($request); verifica che è stato inviato e aggiorna $person
5. Il contenuto di $person viene validato nell’entità Person.php
6. In signIn.php se $person è stato inviato ed è valido: $person = $form->getData();
7. nella sezione di debug gioco un po con i dati:
– mostro il dato come oggetto
– codifico il dato come json
– decodifico il dato da json
– creo un nuovo oggetto istanziando $anotherPerson = new Person();
– creo un array vuoto $people =[]
– inserisco nell’array i 2 oggetti precedentemente creati
– visualizzo i contenuti secondo la sintassi:
$people[1]->name
nomearray[id]->keyword
Il mio sito ufficiale: lucedigitale.com