Estendere le viste in CakePHP

Set 28, 2012 Web Development

Estendere le viste in CakePHP

In questi giorni ho preso in mano una nuova feature in CakePHP che prima avevo sottovaluta. Dalla versione 2.1 CakePHP ha introdotto Extending Views che permettere di richiamare una view da un’altra. Per chi usa Jquery si può dite che si avvicina al convetto di Jqeury Templating. Lo scopo di questa feature è di ridurre la duplicazione del codice HTML nelle varie view, per esempio la nostra pplicazione ha un header che si ripete nelle varie pagina ma abbiamo bisogno che il menu contenuto cambi a seconda della pagina in cui ci troviamo? Niente di più semplice, vediamo come si fa. Creiamo la nostra view:

//app/View/Common/header.ctp
<header>
<nav>
<?php echo $this->fetch('menu'); ?>
</nav>
<div id="breadcrumb">
<?php echo $this->fetch('breadcrumb'); ?>
</div>
</header>
<h1><?php echo $this->fetch('title'); ?></h1>
<?php echo $this->fetch('content'); ?>

Questa vista può essere usata come parte di un’altra vista. Quello che balza subito all’occhio sono i vari $this->fetch(), e capiremo subito come a cosa servono. Quando creeremo una nuova vista, che estenderà questa, sarà la nuova vista a riempire di dati il nostro header.ctp. Tutto questo lavoro ci permetterà di avere menu, breadcrumb, title sempre diversi mentre il content verrà riempito con il resto del contenuto della nostra vista principale.

Ora creiamo la nostra vista che estenderà quella appena creata e la riempirà con i nostri dati.

//app/View/MioController/MiaVista.ctp
<?php 
$this->extend('/Common/header'); 
$this->assign('title', $title); 
$this->assign('breadcrumb', 'Home > User > View'); 
$this->start('menu'); ?> 
<li><?php echo $this->Html->link('Home', array('action' => 'index', 'controller' => 'home')); ?></li> 
<li><?php echo $this->Html->link('Profile', array('action' => 'view', 'controller' => 'user')); ?></li> 
<li><?php echo $this->Html->link('Edit Profile', array('action' => 'edit', , 'controller' => 'user')); ?></li> 
<li><?php echo $this->Html->link('Logout', array('action' => 'logout', , 'controller' => 'user')); ?></li> 
<?php $this->end(); ?> 
<?php // Display the remaining content ...

Di questa vista la funzione più importante che fa funzionare tutto è $this->extend(), questa funzione dice a CakePHP quale vista dev’essere estesa. Penso sia molto intuibile l’uso della funzione $this->assign(), questa serve per assegnare un valore alle chiavi tipo title e breadcrumb mentre $this->start() e $this->end() ha lo stesso utilizzo di $this->assign() ma permette di assegnare un valore molto più complesso e formato da diverse dighe di codice come si vede nell’esempio.

Io fino a quando non ho iniziato ad usare questa feature di CakePHP non avevo realizzato il tempo ma sopratutto codice che si risparmia. Provate anche voi!

About 

Web & Mobile Developer and Web Marketing passionate. Continuous looking for new trend. Good Wine, Diving, SPA and wellness fan.

igorfelluga

Perigorfelluga

Web & Mobile Developer and Web Marketing passionate. Continuous looking for new trend. Good Wine, Diving, SPA and wellness fan.