Finora abbiamo visto solo alcuni tipi di risposta come la semplice restituzione di stringhe o il caricamento di viste.
In questa pagina vediamo altri tipi di risposta.

Redirect

Il redirect è una speciale risposta che sposta il flusso dell’applicazione verso un’altra rotta.

Route::get( '/uno', function()
	{
		return 'uno' ;
	});

Route::get( '/due', function()
	{
		return Redirect::to( '/uno' ) ;
	});

Nella seconda rotta passiamo il risultato di Redirect::to dove ‘/uno‘ è l’URL della rotta di destinazione.

Per passare dati assieme al redirect possiamo utilizzare with

return Redirect::to( '/uno' )->with( 'nome', 'Angelo' ) ;

Il nome potrà essere ricavato nella rotta di destinazione utilizzando il metodo Session::get()

$nome = Session::get( 'nome' ) ;

Un altro tipo di redirect è quello che punta a un controller. Vedremo i controller in un’altra guida.

return Redirect::action('HomeController@index');

Risposte JSON

Laravel permette di restituire direttamente array o oggetti automaticamente.
Route::get( '/json', function()
{
	$dati = array(
		'Portiere' => 'Sirigu',
		'Difensore' => 'Astori',
		'Attaccante' => 'Pellè'
		);
	return Response::json( $dati );
});

Download di un file

Route::get( '/file/download', function()
{
    $file = 'favicon.ico';
    return Response::download( $file );
});

È possibile specificare parametri aggiuntivi, il secondo per specificare il nome del file e il terzo per passare un array di headers aggiuntivi.
Response::download( $file, $nome, $headers);

Risposte personalizzate

Una risposta è generalmente costituita da un body, un codice di stato, da header HTTP e altre informazioni. Il body può essere ad esempio l’html di una pagina mentre il codice di stato può essere un redirect 301.

È possibile creare un nuovo oggetto con il metodo Rensponse::make(), dove il primo parametro rappresenta il corpo del messaggio, il secondo il codice di stato http.

Route::get( '/risposta', function()
	{
		return Response::make( 'Benvenuto nel sito', 200 );
	});

Quindi viene mostrato il messaggio e viene passato il codice 200 che informa il browser che la risposta è stata eseguita correttamente.
Gli headers sono coppie chiave/valore che passano al browser alcune informazioni, ad esempio che tipo di documento deve mostrare, se un immagine o del testo.
Per inserire un header personalizzato

     $risposta = Response::make( 'Benvenuto nel sito', 200 );
     $risposta->headers->set( 'chiave', 'valore');
     return $risposta;

Gli heder possono essere ricavati dalla proprietà headers dell’oggetto della risposta. Con il metodo set possiamo intervenire su questi valori prima di restituire l’oggetto quindi visualizzare la pagina.

Creazione di una sitemap dinamica

Un esempio può essere la creazione di una sitemap dinamica per il nostro sito, dove il file .xml viene generato in base agli articoli presenti nel database.

Creaiamo la rotta che punta a sitemap.xml, un file che in realtà non esiste ma viene generato al volo.

     // app/routes.php
     Route::controller( 'sitemap.xml', 'SitemapController' );

Creiamo un controller che recupera tutte le pagine del sito e genera una risposta personalizzata. Il punto chiave è l’impostazione del content header per un file xml.

class SitemapController extends \BaseController
{

	public function getIndex()
	{
		$data[ 'articoli' ] = Post::orderBy( 'created_at', 'DESC' )->get();
		$contenuto = View::make('sitemap', $data);
		$response = Response::make( $contenuto, 200 );
		$response->headers->set('Content-type', 'text/xml');
		return $response;
	}

}

Infine una vista che contiene i tag xml che saranno ripetuti per ogni pagina del sito

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<?php $pagine = array(); ?>
@foreach( $articoli as $a )
	<url>
		<loc>{{ url('/') . '/' . $a->slug}}</loc>
		<priority>1.0</priority>
		<lastmod>{{$a->updated_at}}</lastmod>
	</url>
@endforeach()
</urlset>

  inStileWeb.com
blog comments powered by Disqus