Zend Framework - Visualizza livello

Un livello di visualizzazione è il livello di presentazione dell'applicazione MVC. Separa la logica dell'applicazione dalla logica di presentazione. In una tipica applicazione web PHP, tutta la logica aziendale e il design sono mescolati. La miscelazione consente uno sviluppo più rapido in un piccolo progetto. Ma fallisce miseramente in un grande progetto, dove è coinvolta molta architettura di alto livello. Per modificare il design dell'applicazione Web, uno sviluppatore deve lavorare anche sulla logica di business. Questo può essere catastrofico con conseguente rottura della logica aziendale.

Zend Framework fornisce un livello di visualizzazione ben pensato, pulito, flessibile ed estendibile. Il livello di visualizzazione è disponibile come modulo separato,Zend/View e integrali bene con Zend/Mvcmodulo. Lo Zend View Layer è suddiviso in più componenti che interagiscono piacevolmente tra loro.

I suoi vari componenti sono i seguenti:

  • Variables Containers - Contiene i dati del livello di visualizzazione.

  • View Models - Contiene contenitori variabili e modello di progettazione.

  • Renderers - Elabora i dati e il modello da Visualizza modello e genera una rappresentazione del progetto, forse l'output html finale.

  • Resolvers - Risolve il modello disponibile nel modello di visualizzazione in modo tale che il Renderer possa consumare.

  • View (Zend\View\View) - Associa la richiesta al renderer e quindi il renderer alla risposta.

  • Rendering Strategies - Utilizzato da View per mappare la richiesta al renderer.

  • Response Strategies - Utilizzato da View per mappare il renderer alla risposta.

Il livello di visualizzazione, View elabora il file ViewModel, risolve il modello utilizzando un file Resolver, renderlo usando Rendering Strategy e infine lo genera usando il Response Renderer.

Visualizza la configurazione dei livelli

Come il controller, un livello di visualizzazione può essere configurato nel file di configurazione di un modulo chiamato come - module.config.php. La configurazione principale consiste nello specificare dove verranno posizionati i modelli. Ciò può essere ottenuto aggiungendo la seguente configurazione in "module.config.php".

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

Per impostazione predefinita, il livello Visualizza ha un comportamento predefinito per tutti i suoi componenti. Ad esempio, aViewModelrisolve il nome del modello dell'azione di un controller all'interno della radice del modello con la regola "nome-modulo-minuscolo / nome-controllore-minuscolo / nome-azione-minuscolo". Tuttavia, questo può essere sovrascritto dasetTemplate() metodo del ViewModel.

Controller e livello di visualizzazione

Per impostazione predefinita, un controller non ha bisogno di inviare dati al livello di visualizzazione. È sufficiente scrivere il modello nella posizione corretta.

Ad esempio, nel nostro esempio, TutorialController, il modello deve essere posizionato in myapp/module/Tutorial/view/tutorial/tutorial/index.phtml. Ilindex.phtmlfa riferimento al modello basato su PHP e sarà renderizzato dal PHPRenderer. Ci sono altri renderer comeJsonRenderer per json uscita e FeedRenderer per rss e atom produzione.

L'elenco completo è il seguente:

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

Modello di applicazione Zend

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

Infine, abbiamo completato con successo il Tutorial modulo e possiamo accedervi utilizzando l'url - http://localhost:8080/tutorial.

Passaggio dei dati al livello di visualizzazione

Il modo più semplice per inviare i dati a un livello di visualizzazione è utilizzare il file ViewModelargomenti. Il cambiatoindexAction metodo è il seguente:

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

Ora, cambia il file index.phtml file come segue -

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

Visualizza gli aiutanti

Un View Helper viene utilizzato per scrivere piccole funzioni atomiche da utilizzare nei modelli. Il framework Zend fornisce un'interfaccia, Zend \ View \ Helper \ HelperInterface per scrivere helper di visualizzazione standard.

Un'HelperInterface ha solo due metodi,

  • setView() - Questo metodo accetta un'istanza / implementazione Zend \ View \ Renderer \ RendererInterface.

  • getView() - Viene utilizzato per recuperare quell'istanza.

L'elenco completo del codice di HelperInterface è il seguente -

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

Per utilizzare un helper nello script di visualizzazione, accedilo utilizzando $this->helperName().

Aiutanti incorporati

Zend Framework fornisce molte funzioni di supporto integrate per vari scopi. Alcuni degli helper di visualizzazione disponibili inzend-mvc sono i seguenti -

URL

L'helper URL viene utilizzato per generare gli URL corrispondenti alle rotte definite nell'applicazione.

La definizione dell'helper URL è:

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

Ad esempio, nel modulo tutorial, la rotta è denominata tutorial e ha due parametri action e id. Possiamo utilizzare l'helper URL per generare due URL diversi come mostrato di seguito:

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

Il risultato sarà il seguente:

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

Segnaposto

L'helper segnaposto viene utilizzato per rendere persistente il contenuto tra gli script di visualizzazione e le istanze di visualizzazione. Fornisce l'opzione per impostare i dati inizialmente e quindi utilizzarli nelle fasi successive.

Ad esempio, possiamo impostare, diciamo company name e poi usalo in tutti gli altri posti.

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

Un segnaposto fornisce alcune delle opzioni avanzate per generare contenuti complessi da array e oggetti PHP. Ha anche la possibilità di catturare alcune sezioni del modello stesso.

Ad esempio, il codice seguente acquisisce il risultato del modello in mezzo e lo memorizza nel file productlist segnaposto.

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'helper Doctype viene utilizzato per generare vari doctype html. È l'implementazione concreta delPlaceholderaiutante. Il doctype può essere impostato in un file bootstrap e in un file di configurazione.

L'utilizzo di base è mostrato di seguito:

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'helper HeadTitle viene utilizzato per generare l'elemento titolo html. È l'attuazione concreta diPlaceholderaiutante. Zend fornisce un'opzione per impostare il titolo nel file di configurazione del modulo e può essere impostato a qualsiasi livello come sito, modulo, controller, azione, ecc. Un codice parziale per HeadTitle è il seguente:

Module

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

Template

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

Result

action - controller - module - Zend Framework

HeadMeta

L'helper HeadMeta viene utilizzato per generare meta tag html. È un'implementazione concreta dell'helper 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'helper HeadLink viene utilizzato per generare collegamenti html per includere risorse esterne. È un'implementazione concreta dell'helper 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'helper HeadStyle viene utilizzato per generare stili CSS in linea. È un'implementazione concreta dell'helper Placeholder.

Template

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

HeadScript

HeadScript viene utilizzato per generare script in linea o per includere script esterni. È un'implementazione concreta dell'helper Placeholder.

Template

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

InlineScript

InlineScript viene utilizzato per generare uno script sia nella sezione head che in quella del corpo del modello html. È derivato da HeadScript.

HTMLList

HTMLList viene utilizzato per generare un elenco ordinato e non ordinato. La definizione di HTMLList è la seguente:

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 viene utilizzato per generare alternative in un ambiente loop. Ha funzione di assegnazione, successiva e precedente.

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>

Alcuni altri importanti helper integrati sono i seguenti:

  • BasePath - Il BasePath viene utilizzato per generare il percorso della cartella pubblica della radice dell'applicazione.

  • Partial - Partial viene utilizzato per eseguire il rendering di un modello specifico nel proprio ambito variabile.

  • PartialLoop - PartialLoop è come Partial, ma utilizzato nell'ambiente di loop.

  • Identity - L'identità viene utilizzata per recuperare l'identità dell'utente connesso dal servizio di autenticazione.

  • JSON- JSON viene utilizzato in un ambiente riposante, in cui l'output è in formato JSON. Emette un'intestazione HTTP corretta e disabilita il concetto di layout.

Ci sono ancora molti helper disponibili in Zend Framework come il i18n helper, form helpers, pagination helpers, navigation helpers, eccetera.

Creazione di view helper

Zend Framework fornisce un built-in AbstractHelper implementazione HelperInterface per scrivere view helper.

I passaggi necessari per scrivere un nuovo aiutante sono i seguenti:

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

  • Step 2 - Ignora il file __invoke() funzione.

  • Step 3 - Impostare la configurazione nel file module.config.php file.

  • Step 4 - Usa l'helper di visualizzazione negli script di visualizzazione.

Creiamo ora un file TestHelper

Crea cartella Helper in myapp/module/Tutorial/src/View directory. ScriviTestHelper all'interno della directory Helper, TestHelper.php.

L'elenco completo è il seguente:

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

Imposta la configurazione in module.config.php.

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

Usa il file appena creato TestHelper nel about visualizza lo script.

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