Zend Framework - Afficher la couche

Une couche de vue est la couche de présentation de l'application MVC. Il sépare la logique d'application de la logique de présentation. Dans une application Web PHP typique, toute la logique métier et la conception sont mélangées. L'intermélange permet un développement plus rapide dans un petit projet. Mais cela échoue lamentablement dans les grands projets, où beaucoup d'architecture de haut niveau est impliquée. Pour modifier la conception de l'application Web, un développeur doit également travailler sur la logique métier. Cela peut être catastrophique et entraîner une rupture de la logique métier.

Zend Framework fournit une couche de vue bien pensée, propre, flexible et extensible. La couche View est disponible en tant que module séparé,Zend/View et s'intègre parfaitement avec Zend/Mvcmodule. Le calque de vue Zend est séparé en plusieurs composants interagissant bien les uns avec les autres.

Ses différents composants sont les suivants -

  • Variables Containers - Contient les données de la couche de vue.

  • View Models - Contient des conteneurs variables et un modèle de conception.

  • Renderers - Traitez les données et le modèle de View Model et produisez une représentation de conception, peut-être la sortie html finale.

  • Resolvers - Résout le modèle disponible dans le modèle de vue de manière à ce que le moteur de rendu puisse consommer.

  • View (Zend\View\View) - Mappe la demande au moteur de rendu, puis le moteur de rendu à la réponse.

  • Rendering Strategies - Utilisé par View pour mapper la demande au moteur de rendu.

  • Response Strategies - Utilisé par View pour mapper le moteur de rendu sur la réponse.

La couche de vue, View traite le ViewModel, résout le modèle à l'aide d'un Resolver, rendez-le en utilisant Rendering Strategy et enfin le sort en utilisant le Response Renderer.

Afficher la configuration des couches

Comme le contrôleur, une couche de vue peut être configurée dans le fichier de configuration d'un module appelé - module.config.php. La configuration principale est de spécifier où les modèles vont être placés. Ceci peut être accompli en ajoutant la configuration suivante dans le «module.config.php».

'view_manager' => [ 
   'template_path_stack' => ['tutorial' => __DIR__ . '/../view',], 
]

Par défaut, la couche View a un comportement par défaut pour tous ses composants. Par exemple, unViewModelrésout le nom du modèle de l'action d'un contrôleur dans la racine du modèle par la règle «nom-module-minuscule / nom-contrôleur-minuscule / nom-action-minuscule». Cependant, cela peut être annulé par lesetTemplate() méthode du ViewModel.

Contrôleurs et calque de vue

Par défaut, un contrôleur n'a pas besoin d'envoyer de données à la couche de vue. Il suffit d'écrire le modèle au bon endroit.

Par exemple, dans notre exemple, TutorialController, le modèle doit être placé à myapp/module/Tutorial/view/tutorial/tutorial/index.phtml. leindex.phtmlfait référence au modèle basé sur PHP et il sera rendu par le PHPRenderer. Il existe d'autres moteurs de rendu tels queJsonRenderer pour json sortie et FeedRenderer pour rss et atom production.

La liste complète est la suivante -

<?php  
namespace Tutorial\Controller;  
use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel;  
class TutorialController extends AbstractActionController { 
   public function indexAction() { 
   } 
}

Modèle d'application Zend

<div class = "row content"> 
   <h3>This is my first Zend application</h3> 
</div>

Enfin, nous avons terminé avec succès le Tutorial module et nous pouvons y accéder en utilisant url - http://localhost:8080/tutorial.

Transmission de données à la couche d'affichage

Le moyen le plus simple d'envoyer les données à une couche de vue consiste à utiliser le ViewModelarguments. Le changéindexAction la méthode est la suivante -

public function indexAction() { 
   $view = new ViewModel([ 'message' => 'Hello, Tutorial' ]); return $view; 
}

Maintenant, changez le index.phtml fichier comme suit -

<div class = "row content"> 
   <h3>This is my first Zend application</h3> 
   <h4><?php echo $this->message?></h4> 
</div>

Afficher les assistants

Un View Helper est utilisé pour écrire de petites fonctions atomiques à utiliser dans les modèles. Le framework Zend fournit une interface, Zend \ View \ Helper \ HelperInterface pour écrire des helpers de vue standard.

Une HelperInterface a juste deux méthodes,

  • setView() - Cette méthode accepte une instance / une implémentation de Zend \ View \ Renderer \ RendererInterface.

  • getView() - Il est utilisé pour récupérer cette instance.

La liste complète des codes de HelperInterface est comme suit -

namespace Zend\View\Helper;  
use Zend\View\Renderer\RendererInterface as Renderer;  
interface HelperInterface { 
   /** 
      * Set the View object 
      * 
      * @param  Renderer $view 
      * @return HelperInterface 
   */ 
   public function setView(Renderer $view);  
   /** 
      * Get the View object 
      * 
      * @return Renderer 
   */ 
   public function getView(); 
}

Pour utiliser un assistant dans votre script de vue, accédez-y en utilisant $this->helperName().

Assistants intégrés

Zend Framework fournit de nombreuses fonctions d'assistance intégrées à diverses fins. Certains des View Helpers disponibles dans lezend-mvc sont comme suit -

URL

L'assistant d'URL est utilisé pour générer les URL correspondant aux routes définies dans l'application.

La définition de l'assistant d'URL est -

$this->url($name, $params, $options, $reuseMatchedParameters)

Par exemple, dans le module du didacticiel, l'itinéraire est nommé tutorial et il a deux paramètres action et id. Nous pouvons utiliser l'assistant d'URL pour générer deux URL différentes comme indiqué ci-dessous -

<a href = "<? = $this->url('tutorial'); ?>">Tutorial Index</a>  
<a href = "<? = $this->url('tutorial', ['action' => 'show', 'id' =>10]); ?>"> 
   Details of Tutorial #10 
</a>

Le résultat sera le suivant -

<a href = "/tutorial">Tutorial Index</a>  
<a href = "/tutorial/show/10"> Details of Tutorial #10</a>

Espace réservé

L'assistant d'espace réservé est utilisé pour conserver le contenu entre les scripts de vue et les instances de vue. Il offre la possibilité de définir les données initialement, puis de les utiliser ultérieurement.

Par exemple, nous pouvons définir, disons company name puis utilisez-le dans tous les autres endroits.

<?php $this->placeholder('companyname')->set("TutorialsPoint") ?>  
<?= $this->placeholder('companyname'); ?>

Un espace réservé fournit certaines des options avancées pour générer du contenu complexe à partir d'un tableau et d'objets PHP. Il a également la possibilité de capturer certaines sections du modèle lui-même.

Par exemple, le code suivant capture le résultat du modèle entre et le stocke dans le productlist espace réservé.

Class – Product

class Product { 
   public $name; 
   public $description; 
}

Controller

$p1 = new Product(); 
$p1->name = 'Car'; $p1->description = 'Car';  
$p2 = new Product(); $p2->name = 'Cycle'; 
$p2->description = 'Cycle'; $view = new ViewModel(['products' => $products]);

Template

<!-- start capture --> 
<?php $this->placeholder('productlist')->captureStart(); 
   foreach ($this->products as $product): ?> 
<div> 
   <h2><?= $product->name ?></h2> <p><?= $product->description ?></p> 
</div> 
<?php endforeach; ?> 
<?php $this->placeholder('productlist')->captureEnd() ?> <!-- end capture --> <?= $this->placeholder('productlist') ?>

Result

<div class = "foo"> 
   <h2>Car</h2> 
   <p>Car</p> 
</div>
<div class = "foo"> 
   <h2>Cycle</h2> 
   <p>Cycle</p> 
</div>

Doctype

L'assistant Doctype est utilisé pour générer différents doctypes html. C'est la mise en œuvre concrète duPlaceholderassistant. Le doctype peut être défini dans un fichier bootstrap et un fichier de configuration.

L'utilisation de base est indiquée ci-dessous -

Application Bootstrap file

use Zend\View\Helper\Doctype;  
$doctypeHelper = new Doctype(); $doctypeHelper->doctype('XHTML5');

Module Configuration

// module/Application/config/module.config.php: 
return [ 
   /* ... */ 
   'view_manager' => [ 
      'doctype' => 'html5', 
      /* ... */ 
   ], 
];

Template

<?php echo $this->doctype() ?>

HeadTitle

L'assistant HeadTitle est utilisé pour générer l'élément de titre html. C'est la mise en œuvre concrète dePlaceholderassistant. Zend fournit une option pour définir le titre dans le fichier de configuration du module et il peut être défini à n'importe quel niveau comme site, module, contrôleur, action, etc. Un code partiel pour le HeadTitle est le suivant -

Module

headTitleHelper->append($action); 
$headTitleHelper->append($controller); 
$headTitleHelper->append($module); 
$headTitleHelper->append($siteName);

Template

<?= $this->headTitle() ?>

Result

action - controller - module - Zend Framework

HeadMeta

L'assistant HeadMeta est utilisé pour générer des balises meta html. C'est une implémentation concrète de l'assistant Placeholder.

Template -

<?php 
   $this->headMeta()->appendName('keywords', 'turorialspoint, zend framework, php');  
   echo $this->headMeta() 
?>

Result

<meta name = "keywords" content = "tutorialspoint, zend framework, php" />

HeadLink

L'assistant HeadLink est utilisé pour générer des liens html pour inclure des ressources externes. C'est une implémentation concrète de l'assistant Placeholder.

Template

<?php 
   // setting links in a view script: 
   $this->headLink(['rel' => 'icon', 'href' => '/img/favicon.ico'], 'PREPEND') 
      ->appendStylesheet('/styles/site.css') 
      ->prependStylesheet('/styles/mystyle.css', 'screen', true, ['id' => 'mystyle']);  
   
   // rendering the links from the layout: 
   echo $this->headLink(); 
?>

Result

<link href = "/styles/mystyle.css" media = "screen" rel = "stylesheet" 
   type = "text/css" id = "mystyle"> 
<link href = "/img/favicon.ico" rel = "icon"> 
<link href = "/styles/site.css" media = "screen" rel = "stylesheet" type = "text/css">

HeadStyle

L'assistant HeadStyle est utilisé pour générer des styles CSS en ligne. Il s'agit d'une implémentation concrète de l'assistant Placeholder.

Template

<?php $this->headStyle()->appendStyle($styles); ?> <?php echo $this->headStyle() ?>

HeadScript

Le HeadScript est utilisé pour générer un script en ligne ou pour inclure des scripts externes. C'est une implémentation concrète de l'assistant Placeholder.

Template

<? $this->headScript()->appendFile(‘/js/sample.js’);?> <?php echo $this->headScript() ?>

InlineScript

Le InlineScript est utilisé pour générer un script dans la section head et body du modèle html. Il est dérivé du HeadScript.

HTMLList

La HTMLList est utilisée pour générer une liste ordonnée et non ordonnée. La définition de la HTMLList est la suivante -

Definition

htmlList($items, $ordered, $attribs, $escape)

Template

$items = [ '2015', ['March', 'November'], '2016', ]; echo $this->htmlList($items);

Result

<ul> 
   <li>2015 
      <ul> 
         <li>March</li> 
         <li>November</li> 
      </ul> 
   </li> 
   <li>2016</li> 
</ul>

Cycle

Un cycle est utilisé pour générer des alternatives dans un environnement de boucle. Il a les fonctions assign, next et prev.

Controller

$view = new ViewModel(['message' => 'Hello, Tutorial', 'data' => array('One', 'Two')]);

Template

<?php $this->cycle()->assign(['#F0F0F0', '#FFF'], 'colors'); ?> <table> <?php foreach ($this->data as $datum): ?> <tr style = "background-color: <?= $this->cycle()->setName('colors')>next() ?>">
      <td><?= $this->escapeHtml($datum) ?></td>
   </tr>
   <?php endforeach ?>
</table>

Result

<table> 
   <tr style = "background-color: #F0F0F0"> 
      <td>One</td> 
   </tr> 
   <tr style = "background-color: #FFF"> 
      <td>Two</td> 
   </tr> 
</table>

Voici quelques autres aides intégrées importantes:

  • BasePath - Le BasePath est utilisé pour générer le chemin du dossier public de la racine de l'application.

  • Partial - Partiel est utilisé pour rendre un modèle spécifique dans sa propre portée de variable.

  • PartialLoop - PartialLoop est comme Partial, mais utilisé dans l'environnement de bouclage.

  • Identity - L'identité est utilisée pour récupérer l'identité de l'utilisateur connecté à partir du service d'authentification.

  • JSON- JSON est utilisé dans un environnement reposant, où la sortie est au format JSON. Il émet un en-tête HTTP approprié et désactive le concept de disposition.

Il y a encore beaucoup d'aides disponibles dans Zend Framework comme le i18n helper, form helpers, pagination helpers, navigation helpers, etc.

Créer des View Helpers

Le Zend Framework fournit un AbstractHelper exécution HelperInterface pour écrire des aides de vue.

Les étapes impliquées dans l'écriture d'un nouvel assistant sont les suivantes -

  • Step 1 - Etendez la classe Zend \ View \ Helper \ AbstractHelper.

  • Step 2 - Remplacer le __invoke() fonction.

  • Step 3 - Définissez la configuration dans le module.config.php file.

  • Step 4 - Utilisez l'aide à la vue dans les scripts de vue.

Créons maintenant un TestHelper

Créer un dossier Helper à myapp/module/Tutorial/src/View directory. ÉcrireTestHelper dans le répertoire Helper, TestHelper.php.

La liste complète est la suivante -

<?php  
namespace Tutorial\View\Helper; 
use Zend\View\Helper\AbstractHelper; 
class TestHelper extends AbstractHelper { 
   public function __invoke() { 
      $output = "I am from test helper"; return htmlspecialchars($output, ENT_QUOTES, 'UTF-8'); 
   } 
}

Définir la configuration dans module.config.php.

'view_helpers' => [ 
   'aliases' => [ 
      'testHelper' => View\Helper\TestHelper::class, 
   ], 
   'factories' => [ 
      View\Helper\TestHelper::class => InvokableFactory::class, 
   ],
],

Utilisez le nouvellement créé TestHelper dans le about afficher le script.

<?= $this->testHelper() ?>