Le applicazioni web per funzionare necessitano spesso di informazioni che provengono dell’esterno. Queste possono essere inviate ad esempio da un form html o da parametri passati nell’url.

Questi dati potranno essere modificati, salvete nel database o utilizzati per visualizzare una particolare risorsa.

Per accedere ai dati in ingresso nell’applicazione Laravel mette a disposizione  la classe Input. Questa potrà essere utilizzata indifferentemente per i dati che arrivano tramite get (accesso alla variabile $_GET) oppure tramite  post (accesso a $_POST).

Recupero dati: metodo get

creiamo una rotta chiamata esempio/get

Route::get( 'esempio/get', function()
	{
                $data ( Input::all() );
		var_dump( $data  );
	} );

Attraverso il metodo Input::all() accediamo a tutti gli input della richiesta.
Quindi se visitaimo la pagina esempio/get?a=10&b=20
otteniamo

array(2) {
  ["a"]=>
  string(2) "10"
  ["b"]=>
  string(2) "20"
}

Potremo accedere ai singoli dati utilizzando il metodo Input::get()

Route::get( 'esempio/get', function()
	{
                $a =  Input::get( 'a' ) ;
                $b =  Input::get( 'b' ) ;
		echo $a . ' - ' . $b;
	} );

Recupero dati: metodo post

Creaiamo una rotta per la visualizzazione di un form di inserimento

Route::post( 'esempio/form', function()
	{
		return View::make( 'formtest' );
	} );

Creiamo la vista formtest.blade.php
vista-form-laravel
Contenuto del form

{{ Form::open(array('url'=>'esempio/post')) }}

{{ Form::label('Nome','Tuo nome', array( 'id'=>'name' )) }}
{{ Form::text('nome','Inserisci nome', array( 'id'=>'text-name' )) }} <br />

{{ Form::label('cognome','Tuo cognome', array( 'id'=>'surname' )) }} <br />
{{ Form::text('cognome','Tuo cognome', array( 'id'=>'text-surname' )) }} <br />

{{ Form::submit( 'Invia ') }}

{{ Form::close() }}

Il form ha come action esempio/post quindi dobbiamo creare questa rotta per intercettare i dati inviati.
Utilizzeremo come nel primo esempio Input::all() per accedere a tutti i dati contemporaneamente, Input::get() per ricavare i singoli valori.

Route::post( 'esempio/post', function()
	{
		$data = Input::all();
                var_dump( $data );
	} );
Route::post( 'esempio/post', function()
	{
		$nome = Input::get( 'nome' );
                $cognome = Input::get( 'cognome' );
                echo $nome . $cognome;
	} );

Recupero dati: metodo misto get / post

Un caso meno banale si ha quando inviamo contemporaneamente dati in get e post.
Modifichiamo la vista dell’esempio precedente (prima riga).

{{ Form::open(array('url'=>'esempio/post?paese=Italia')) }}

{{ Form::label('Nome','Tuo nome', array( 'id'=>'name' )) }}
{{ Form::text('nome','Inserisci nome', array( 'id'=>'text-name' )) }} <br />

{{ Form::label('cognome','Tuo cognome', array( 'id'=>'surname' )) }} <br />
{{ Form::text('cognome','Tuo cognome', array( 'id'=>'text-surname' )) }} <br />

{{ Form::submit( 'Invia ') }}

{{ Form::close() }}

Sottoscrivendo il form vedremo nel var_dump() l’informazione realtiva al paese. Nel caso di una collisione tra chiave get e chiave post, il valore inviato tramite post sembra avere la priorità.

Altri metodi della classe Input

Ottenere sono alcuni input della richiesta:

$data = input::only( 'nome' );

Ottenere tutti i dati tranne quello specificato:

$data = input::except( 'cognome' );

Può capitare che un input arrivi sotto forma di array. In questi casi possiamo utilizzare una sintassi particolare dove un punto separa la le coppie chiave.valore

$data = input::get( 'prodotti.0' );

Conservare i vecchi input

Spesso è necessario conservare gli input che saranno riutilizzati successivamente in un’altra richiesta.

Salvare gli input nella sessione

Torniamo per un attimo al codice del primo esempio e visitiamo l’indirizzo esempio/get?user=luca&email=luca@email-esempio.com.
Vediamo che il metodo Input::flash(); inserisce i dati inviati nella sessione.

Route::get( 'esempio/get', function()
	{
           print_r( Session::all() );

           Input::flash();

           print_r( Session::all() );
	} );

Per salvare solo alcuni input

Input::flashOnly( 'user', 'email' );

Per salvare solo tutti gli input tranne uno specificato

Input::flashExcept( 'password' );

Inviamo gli input a una vista

Nel caso vogliamo rimandare indietro gli input a un form, ad esempio in seguito a una validazione fallita possiamo utilizzare il metodo withInput()

return Redirect::to( 'formtest' )->withInput();

tutti gli input eccetto il nome

return Redirect::to( 'form' )->withInput( Input::except( 'nome' ) );

Upload di immagini e altri file

Nel caso con un form sia inviato un file si può fare riferimento a questo post in cui viene utilizzato il metodo Input::file();


  inStileWeb.com
blog comments powered by Disqus