In questo articolo andremo a vedere come funziona il pattern MVC in October, cominceremo quindi con il creare un controller base, la cui documentazione ufficiale è disponibile qui.
namespace Lbenati\Mioplugin\Controllers;
use Backend\Classes\Controller;
class MioController extends Controller
{
// qui definiremo i metodi
}
In October il routing di backend segue lo schema del controller, quindi la classe definita qui sopra avrà come prefisso di route /backend/lbenati/mioplugin/miocontroller.
L'entry point di default è definito dal metodo index, chiamata una "action". Questo come gli altri metodi che verranno definiti possono ritornare direttamente un contenuto
public function index()
{
// Ritorno una stringa
return 'Ciao';
}
oppure possono ad esempio ritornare un redirect ad un'altra pagina, in questo esempio vediamo un redirect al metodo (action) 'miometodo' dello stesso controller
public function index()
{
// Ritorno un redirect
return \Backend::redirect('/backend/lbenati/mioplugin/miocontroller/miometodo');
}
public function miometodo()
{
// ...
}
Quando un'azione (metodo della classe del controller) non ritorna nulla October cercerà un file per la vista con lo stesso nome dell'action. In questo caso il file plugins/lbenati/mioplugin/miocontroller/miometodo.htm
Se una metodo accetta dei parametri questi verranno presi dai segmenti della url che seguono la action.
La seguente action usa la struttura della url /backend/lbenati/mioplugin/miocontroller/miometodo/luca
In questo caso 'luca' sarà il valore di $nome all'interno della action miometodo
public function miometodo($name = null)
{
return 'Il mio nome è : ' . $name;
}
Le variabili possono essere passate alla view usando la proprietà $this->vars. Ad esempio se volessimo passare il mio nome alla vista miometodo.htm scriveremo
public function miometodo($nome = null)
{
$this->vars['mionome'] = $nome;
}
Ora possiamo accedere al nome tramite la variabile $mionome nel corrispondente file plugins/lbenati/mioplugin/miocontroller/miometodo.htm
<h1>Il mio nome è: <?= $mionome ?></h>
Naturalmente è possibile specificare quanti parametri si desidera seguendo lo stesso schema. Ad esempio se noi aggiungiamo il parametro congnome al metodo, tramite la url /backend/lbenati/mioplugin/miocontroller/miometodo/luca/benati valorizzeremo $nome con il valore 'luca' e $cognome con il valore 'benati'
public function miometodo($nome = null, $cognome = null)
{
$this->vars['mionome'] = $nome;
$this->vars['miocognome'] = $cognome;
$this->vars['mionomecompleto'] = $nome . ' ' . $cognome;
}
nel file plugins/lbenati/mioplugin/miocontroller/miometodo.htm
<h1>Il mio nome è: <?= $mionome ?></h>
<h1>Il mio cognome è: <?= $miocognome ?></h>
<h1>Il mio nome completo è: <?= $mionomecompleto ?></h>
I controller possono anche specificare gestori Ajax (Ajax hanldler), rendendo gli aggiornamenti di pagina dinamici un gioco da ragazzi.
Questi metodi devono sempre essere specificati aggiungendo il prefisso 'on' al nome del metodo, come ad esempio onMetodo, qui specificheremo un gestore chiamato onMiometodo.
public function onMiometodo()
{
// ...
}
Per rendere un gestore Ajax disponibile solo a ad una specifica action è possibile farlo aggiungendo come prefisso il nome dell'azione che ne ha il permesso.
Ad esempio questo Ajax handler può essere chiamato solo dalla action miometodo.
public function miometodo_onMiometodo()
{
// ...
}
In entrambi i casi il metodo Ajax cercherà nella URL i parametri esattamente come fa la action.
Ad esempio mostriamo un bel messaggio flash.
public function onMiometodo($nome = null)
{
\Flash::success( 'Complimenti! ' . $nome . ' è proprio un gran bel nome!');
}
Per ora questo è tutto, in un prossimo articolo approfondiremo i controllers e i Behaviors messi a disposizione da October.
Lunga vita e prosperità