Del 4 - Zend_View
Zend_view hanterar visningen och genereringen av vyerna. I kodexemplet ovan kan ni se följande rad, som returnerar den genererade vyn:
return $this->render('list');
ZF har som en standard att vy-filen mappar mot action-metodens namn:
public function listAction() -> 'list.phtml' -> $this->render('list');
public function searchAction() -> 'search.phtml' -> $this->render('search');
Vyfilerna har som standard filändelsen '.phtml'.
Vyfilerna innehåller mestadels HTML samt viss PHP-kod för att kunna visa data från t.ex. en modell. Vi vill dock ha så “rena” vyfiler som möjligt som innehåller så lite PHP-kod som möjligt. Detta gör det lättare för bl. a designers att göra ändringar vyerna utan större kunskap om PHP. Till detta kan vi använda Zend_View_Helper.
Zend_View_Helper
Vyfilerna har ofta viss funktionalitet som återkommer i flera vyer, t.ex. visning av datum. Dessutom vill vi visa om användaren är inloggad eller inte.
Normalt:
if($loggedIn)
{
echo "Welcome xxxx, " . '<a href="#logout.php">Log out</a>;
}
else
{
echo '<a href="login.php">Log in</a>
}
Med en view helper:
echo $this->loggedIn();
Vår blogg har faktiskt en sådan view helper:
class Zend_View_Helper_LoggedIn
{
...
public function loggedIn()
{
$auth = Zend_Auth::getInstance();
$str = '';
if($auth->hasIdentity())
{
$username = $auth->getStorage()->read()->username;
$str = 'Hello '. $username . ' (<a href="' . $this->_view->baseUrl() . '/login/logout">Log out</a>)';
}
else
{
$str = '<a href="' . $this->_view->baseUrl() . '/login">Log in</a>';
}
return $str;
}
...
}
ZF har flera inbyggda view helpers. Några av dessa har vi faktiskt använt, om än implicit. Titta bara i form-klasserna. Där skapar vi ju formulärinnehållet t.ex. på följande vis:
$username = $this->createElement('text', 'username');
Grundtanken är att en view helper inte skriver ut sitt innehåll själv med echo eller print(), utan returnerar innehållet istället.
Metoden createElement(...) använder faktiskt internt en view helper för att skapa textfältet åt oss. Då vår blogg använder Zend_Form för att generera formulärfälten så har vi inte behövt använda dessa view helpers direkt.