Zend Framework - Capa de vista

Una capa de vista es la capa de presentación de la aplicación MVC. Separa la lógica de la aplicación de la lógica de presentación. En una aplicación web PHP típica, toda la lógica empresarial y el diseño están entremezclados. La mezcla permite un desarrollo más rápido en un proyecto pequeño. Pero falla miserablemente en proyectos grandes, donde se involucra mucha arquitectura de alto nivel. Para cambiar el diseño de la aplicación web, el desarrollador también debe trabajar en la lógica empresarial. Esto puede ser catastrófico y provocar la ruptura de la lógica empresarial.

Zend Framework proporciona una capa de visualización bien pensada, limpia, flexible y ampliable. La capa Ver está disponible como un módulo separado,Zend/View e integrar bien con Zend/Mvcmódulo. La capa de vista de Zend está separada en varios componentes que interactúan muy bien entre sí.

Sus diversos componentes son los siguientes:

  • Variables Containers - Contiene los datos de la capa de vista.

  • View Models - Contiene contenedores variables y plantilla de diseño.

  • Renderers - Procese los datos y la plantilla de View Model y genere una representación de diseño, tal vez la salida html final.

  • Resolvers - Resuelve la plantilla disponible en el Modelo de Vista de tal manera que el Renderer puede consumir.

  • View (Zend\View\View) - Solicitud de mapas al renderizador y luego el renderizador a la respuesta.

  • Rendering Strategies - Utilizado por Vista para mapear la solicitud al renderizador.

  • Response Strategies - Utilizado por Vista para asignar el renderizador a la respuesta.

La capa de vista, View procesa el ViewModel, resuelve la plantilla usando un Resolver, renderícelo usando Rendering Strategy y finalmente lo genera usando el Response Renderer.

Ver configuración de capa

Al igual que el controlador, una capa de vista se puede configurar en el archivo de configuración de un módulo llamado como - module.config.php. La configuración principal es especificar dónde se colocarán las plantillas. Esto se puede lograr agregando la siguiente configuración en el "module.config.php".

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

De forma predeterminada, la capa Ver tiene un comportamiento predeterminado para todos sus componentes. Por ejemplo, unViewModelresuelve el nombre de plantilla de la acción de un controlador dentro de la raíz de la plantilla mediante la regla “nombre-módulo-minúsculas / nombre-controlador-minúsculas / nombre-acción-minúsculas”. Sin embargo, esto puede ser anulado porsetTemplate() método de ViewModel.

Controladores y capa de vista

De forma predeterminada, un controlador no necesita enviar ningún dato a la capa de visualización. Basta con escribir la plantilla en el lugar adecuado.

Por ejemplo, en nuestro ejemplo, TutorialController, la plantilla debe colocarse en myapp/module/Tutorial/view/tutorial/tutorial/index.phtml. losindex.phtmlhace referencia a la plantilla basada en PHP y será renderizada por PHPRenderer. Hay otros renderizadores comoJsonRenderer para json salida y FeedRenderer para rss y atom salida.

La lista completa es la siguiente:

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

Plantilla de aplicación Zend

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

Finalmente, hemos completado con éxito el Tutorial módulo y podemos acceder a él usando url - http://localhost:8080/tutorial.

Pasar datos a la capa de visualización

La forma más sencilla de enviar los datos a una capa de vista es utilizar el ViewModelargumentos. El cambiadoindexAction El método es el siguiente:

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

Ahora, cambie el index.phtml archivo de la siguiente manera:

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

Ver ayudantes

Un View Helper se utiliza para escribir pequeñas funciones atómicas que se utilizarán en plantillas. Zend framework proporciona una interfaz, Zend \ View \ Helper \ HelperInterface para escribir ayudantes de vista estándar.

Una HelperInterface tiene solo dos métodos,

  • setView() - Este método acepta una instancia / implementación de Zend \ View \ Renderer \ RendererInterface.

  • getView() - Se utiliza para recuperar esa instancia.

La lista completa de códigos de HelperInterface es como sigue -

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(); 
}

Para usar un ayudante en su script de vista, acceda a él usando $this->helperName().

Ayudantes incorporados

Zend Framework proporciona una gran cantidad de funciones de ayuda incorporadas para varios propósitos. Algunos de los ayudantes de vista disponibles enzend-mvc son los siguientes:

URL

El asistente de URL se utiliza para generar las URL que coinciden con las rutas definidas en la aplicación.

La definición del asistente de URL es:

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

Por ejemplo, en el módulo tutorial, la ruta se denomina como tutorial y tiene dos parámetros action y id. Podemos usar el asistente de URL para generar dos URL diferentes como se muestra a continuación:

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

El resultado será el siguiente:

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

Marcador de posición

El asistente de marcador de posición se utiliza para conservar el contenido entre scripts de vista e instancias de vista. Ofrece la opción de configurar los datos inicialmente y luego usarlos en etapas posteriores.

Por ejemplo, podemos establecer, digamos company name y luego utilícelo en todos los demás lugares.

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

Un marcador de posición proporciona algunas de las opciones avanzadas para generar contenido complejo a partir de objetos y matrices PHP. También tiene la opción de capturar cierta sección de la propia plantilla.

Por ejemplo, el siguiente código captura el resultado de la plantilla en el medio y lo almacena en el productlist marcador de posición.

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

El ayudante de Doctype se utiliza para generar varios tipos de documentos HTML. Es la implementación concreta delPlaceholderayudante. El tipo de documento se puede configurar en un archivo de arranque y un archivo de configuración.

El uso básico se muestra a continuación:

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

El ayudante HeadTitle se utiliza para generar el elemento de título html. Es la implementación concreta dePlaceholderayudante. Zend proporciona una opción para establecer el título en el archivo de configuración del módulo y se puede establecer en cualquier nivel como sitio, módulo, controlador, acción, etc. Un código parcial para HeadTitle es el siguiente:

Module

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

Template

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

Result

action - controller - module - Zend Framework

HeadMeta

El ayudante HeadMeta se utiliza para generar metaetiquetas html. Es una implementación concreta del asistente de marcador de posición.

Template -

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

Result

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

HeadLink

El asistente HeadLink se utiliza para generar enlaces html para incluir recursos externos. Es una implementación concreta del asistente de marcador de posición.

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

El ayudante HeadStyle se utiliza para generar estilos CSS en línea. Es una implementación concreta del asistente de marcador de posición.

Template

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

HeadScript

El HeadScript se utiliza para generar secuencias de comandos en línea o para incluir secuencias de comandos externas. Es una implementación concreta del asistente de marcador de posición.

Template

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

InlineScript

El InlineScript se utiliza para generar un script tanto en la sección principal como en la sección del cuerpo de la plantilla html. Se deriva de HeadScript.

HTMLList

La HTMLList se utiliza para generar listas ordenadas y desordenadas. La definición de HTMLList es la siguiente:

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>

Ciclo

Un ciclo se utiliza para generar alternativas en un entorno de bucle. Tiene función de asignación, siguiente y anterior.

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>

Algunos otros ayudantes incorporados importantes son los siguientes:

  • BasePath - BasePath se utiliza para generar la ruta de la carpeta pública de la raíz de la aplicación.

  • Partial - Parcial se utiliza para representar una plantilla específica en su propio ámbito variable.

  • PartialLoop - PartialLoop es como Partial, pero se usa en el entorno de bucle.

  • Identity - La identidad se utiliza para recuperar la identidad del usuario que ha iniciado sesión del Servicio de autenticación.

  • JSON- JSON se utiliza en un entorno tranquilo, donde la salida está en formato JSON. Emite un encabezado HTTP adecuado y deshabilita el concepto de diseño.

Todavía hay muchos ayudantes disponibles en Zend Framework, como el i18n helper, form helpers, pagination helpers, navigation helpersetc.

Crear ayudantes de vista

Zend Framework proporciona una función AbstractHelper implementar HelperInterface para escribir ayudantes de vista.

Los pasos necesarios para escribir un nuevo ayudante son los siguientes:

  • Step 1 - Amplíe la clase Zend \ View \ Helper \ AbstractHelper.

  • Step 2 - Anular el __invoke() función.

  • Step 3 - Establecer la configuración en el module.config.php file.

  • Step 4 - Utilice el asistente de visualización en los scripts de visualización.

Creemos ahora un TestHelper

Crear carpeta de ayuda en myapp/module/Tutorial/src/View directory. EscribirTestHelper dentro del directorio Helper, TestHelper.php.

La lista completa es la siguiente:

<?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'); 
   } 
}

Establecer configuración en module.config.php.

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

Utilice el recién creado TestHelper en el about ver guión.

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