Nelle pagine precedenti ogni rotta era collegata a una funzione anonima che stabiliva il comportamento dell’applicazione. In realtà un sito reale è sempre più complesso per cui è conveniete organizzare la logica in speciali classi chiamate controller.
Un controller contiene un certo numero di metodi pubblici chiamati action.

Creare un controller

I controller sono posizionati nella cartella app/controllers. Questa cartella è predisposta a contenere file con classi, infatti se apriamo il file composer.json possiamo vedere che ‘app/controllers’ figura tra le cartelle in autoload e classmap.

"autoload": {
	"classmap": [
		"app/commands",
		"app/controllers",
		"app/models",
		"app/database/migrations",
		"app/database/seeds",
		"app/tests/TestCase.php"
	]
,

Vogliamo creare controller per gli gestire articoli del sito. Il codice sarà all’interno del fine PostController.php

laravel-post-controller

Il nome non è casuale ma deve corrispondere al nome della classe. Per convenzione Utilizziamo la parola Controller con iniziale maiuscola preceduta da un suffisso che indica il contenuto del controller.

<?php
class PostController extends BaseController {

    public function showIndex()
    {
    	return View::make( 'articoli' );
    }

    public function showSingle()
    {
    	return View::make( 'singolo' );
    }

}

Nel codice abbiamo creato una sottoclasse di BaseController (sempre presente in app/controller) che a sua volta estende la classe Controller.
Abbiamo poi definito due metodi showIndex() e showSingle() che si occupano di caricare due viste, una per l’elenco di articoli e l’altra per un articolo singolo.

Collegare le rotte ai controller

Route::get( 'articoli', 'PostController@showIndex' );

Rispetto alle rotte utilizzate finora, questa come secondo parametro contiene qualcosa di diverso. Possiamo notare come il parametro sia contituito da due parti separate da @. La prima è il nome del Controller, mentre la seconda è il metodo chiamato (action) .

Passare parametri alle action

È possibile passare parametri dalla rotta al controller in modo simile a come abbiamo visto per le funzioni anonime.

Route::get('articoli/{id}', 'PostController@showSingle');
<?php
class PostController extends BaseController {

    public function showIndex()
    {
    	return View::make( 'articoli' );
    }

    public function showSingle( $id )
    {
        //recuperiamo l'articolo con l'id passato; questo codice lo capiremo più avanti con i model
    	$articolo = Articolo::find( $id );
        return View::make( 'singolo', $articolo );
    }

}

  inStileWeb.com
blog comments powered by Disqus