Zend Framework - Ansichtsebene

Eine Ansichtsebene ist die Präsentationsschicht der MVC-Anwendung. Es trennt die Anwendungslogik von der Präsentationslogik. In einer typischen PHP-Webanwendung sind die gesamte Geschäftslogik und das gesamte Design miteinander vermischt. Das Vermischen ermöglicht eine schnellere Entwicklung in einem kleinen Projekt. Bei großen Projekten, bei denen es um viel Architektur auf hoher Ebene geht, scheitert es jedoch kläglich. Um das Design der Webanwendung zu ändern, muss ein Entwickler auch an der Geschäftslogik arbeiten. Dies kann katastrophal sein und zu einem Bruch der Geschäftslogik führen.

Zend Framework bietet eine durchdachte, saubere, flexible und erweiterbare Ansichtsebene. Die Ansichtsebene ist als separates Modul verfügbar.Zend/View und gut integrieren mit Zend/MvcModul. Die Zend View-Ebene ist in mehrere Komponenten unterteilt, die gut miteinander interagieren.

Seine verschiedenen Komponenten sind wie folgt:

  • Variables Containers - Enthält die Daten der Ansichtsebene.

  • View Models - Enthält variable Container und Entwurfsvorlagen.

  • Renderers - Verarbeiten Sie Daten und Vorlagen aus dem Ansichtsmodell und geben Sie eine Entwurfsdarstellung aus, möglicherweise die endgültige HTML-Ausgabe.

  • Resolvers - Löst die im Ansichtsmodell verfügbare Vorlage so auf, dass der Renderer sie verwenden kann.

  • View (Zend\View\View) - Ordnet die Anforderung dem Renderer und dann dem Renderer der Antwort zu.

  • Rendering Strategies - Wird von View verwendet, um die Anforderung dem Renderer zuzuordnen.

  • Response Strategies - Wird von View verwendet, um den Renderer der Antwort zuzuordnen.

Die Ansichtsebene, View verarbeitet die ViewModel, löst die Vorlage mit a auf Resolver, rendern Sie es mit Rendering Strategy und gibt es schließlich mit dem aus Response Renderer.

Layer-Konfiguration anzeigen

Wie der Controller kann eine Ansichtsebene in der Konfigurationsdatei eines Moduls mit der Bezeichnung - konfiguriert werden module.config.php. Die Hauptkonfiguration besteht darin, anzugeben, wo die Vorlagen platziert werden sollen. Dies kann durch Hinzufügen der folgenden Konfiguration in der Datei "module.config.php" erreicht werden.

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

Standardmäßig hat die Ansichtsebene ein Standardverhalten für alle ihre Komponenten. Zum Beispiel aViewModelLöst den Vorlagennamen der Aktion eines Controllers im Vorlagenstamm durch die Regel "Kleinbuchstaben-Modulname / Kleinbuchstaben-Controller-Name / Kleinbuchstaben-Aktionsname" auf. Dies kann jedoch durch die überschrieben werdensetTemplate() Methode des ViewModel.

Controller und Ansichtsebene

Standardmäßig muss ein Controller keine Daten an die Ansichtsebene senden. Es reicht aus, die Vorlage an der richtigen Stelle zu schreiben.

In unserem Beispiel zum Beispiel TutorialControllermuss die Vorlage bei platziert werden myapp/module/Tutorial/view/tutorial/tutorial/index.phtml. Dasindex.phtmlverweist auf die PHP-basierte Vorlage und wird vom PHPRenderer gerendert. Es gibt andere Renderer wieJsonRenderer zum json Ausgabe und FeedRenderer zum rss und atom Ausgabe.

Die vollständige Auflistung ist wie folgt -

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

Zend-Anwendungsvorlage

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

Endlich haben wir das erfolgreich abgeschlossen Tutorial Modul und wir können mit URL darauf zugreifen - http://localhost:8080/tutorial.

Daten an View Layer übergeben

Der einfachste Weg, die Daten an eine Ansichtsebene zu senden, ist die Verwendung von ViewModelArgumente. Das hat sich geändertindexAction Methode ist wie folgt -

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

Ändern Sie jetzt die index.phtml Datei wie folgt -

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

Helfer anzeigen

Mit einem Ansichtshelfer werden kleine atomare Funktionen geschrieben, die in Vorlagen verwendet werden sollen. Das Zend-Framework bietet eine Schnittstelle, Zend \ View \ Helper \ HelperInterface, um Standard-Ansichtshilfen zu schreiben.

Ein HelperInterface hat nur zwei Methoden:

  • setView() - Diese Methode akzeptiert eine Instanz / Implementierung von Zend \ View \ Renderer \ RendererInterface.

  • getView() - Es wird verwendet, um diese Instanz abzurufen.

Die vollständige Codeliste von HelperInterface ist wie folgt -

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

Um einen Helfer in Ihrem Ansichtsskript zu verwenden, greifen Sie mit zu $this->helperName().

Eingebaute Helfer

Zend Framework bietet viele integrierte Hilfsfunktionen für verschiedene Zwecke. Einige der in derzend-mvc sind wie folgt -

URL

Der URL-Helfer wird verwendet, um die URLs zu generieren, die den in der Anwendung definierten Routen entsprechen.

Die Definition des URL-Helfers lautet -

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

Im Lernprogrammmodul wird die Route beispielsweise als benannt tutorial und es hat zwei Parameter action und id. Wir können den URL-Helfer verwenden, um zwei verschiedene URLs zu generieren, wie unten gezeigt -

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

Das Ergebnis wird wie folgt sein:

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

Platzhalter

Der Platzhalter-Helfer wird verwendet, um Inhalte zwischen Ansichtsskripten und Ansichtsinstanzen beizubehalten. Es bietet die Möglichkeit, Daten zunächst festzulegen und in späteren Phasen zu verwenden.

Zum Beispiel können wir beispielsweise einstellen company name und dann an allen anderen Orten verwenden.

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

Ein Platzhalter bietet einige der erweiterten Optionen zum Generieren komplexer Inhalte aus PHP-Arrays und -Objekten. Es besteht auch die Möglichkeit, bestimmte Abschnitte der Vorlage selbst zu erfassen.

Der folgende Code erfasst beispielsweise das Zwischenergebnis der Vorlage und speichert es in der productlist Platzhalter.

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>

Doktortyp

Der Doctype-Helfer wird verwendet, um verschiedene HTML-Doctypes zu generieren. Es ist eine konkrete Umsetzung derPlaceholderHelfer. Der Doctype kann in einer Bootstrap-Datei und einer Konfigurationsdatei festgelegt werden.

Die grundlegende Verwendung wird unten gezeigt -

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

Der HeadTitle-Helfer wird zum Generieren des HTML-Titelelements verwendet. Es ist die konkrete Umsetzung vonPlaceholderHelfer. Zend bietet eine Option zum Festlegen des Titels in der Modulkonfigurationsdatei und kann auf jeder Ebene wie Site, Modul, Controller, Aktion usw. festgelegt werden. Ein Teilcode für den HeadTitle lautet wie folgt:

Module

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

Template

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

Result

action - controller - module - Zend Framework

HeadMeta

Der HeadMeta-Helfer wird zum Generieren von HTML-Meta-Tags verwendet. Es ist eine konkrete Implementierung des Platzhalter-Helfers.

Template - -

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

Result

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

HeadLink

Der HeadLink-Helfer wird verwendet, um HTML-Links zu generieren, die externe Ressourcen enthalten. Es ist eine konkrete Implementierung des Platzhalter-Helfers.

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

Der HeadStyle-Helfer wird zum Generieren von Inline-CSS-Stilen verwendet. Es ist eine konkrete Implementierung des Platzhalter-Helfers.

Template

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

HeadScript

Das HeadScript wird verwendet, um Inline-Skripte zu generieren oder externe Skripte einzuschließen. Es ist eine konkrete Implementierung des Platzhalter-Helfers.

Template

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

InlineScript

Das InlineScript wird verwendet, um ein Skript sowohl im Kopf- als auch im Hauptteil der HTML-Vorlage zu generieren. Es ist vom HeadScript abgeleitet.

HTMLList

Die HTMLList wird verwendet, um geordnete und ungeordnete Listen zu generieren. Die Definition der HTMLList lautet wie folgt:

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>

Zyklus

Ein Zyklus wird verwendet, um Alternativen in einer Schleifenumgebung zu generieren. Es hat die Funktion zuweisen, weiter und vorher.

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>

Einige andere wichtige eingebaute Helfer sind wie folgt:

  • BasePath - Der BasePath wird verwendet, um den Pfad des öffentlichen Ordners des Stammverzeichnisses der Anwendung zu generieren.

  • Partial - Partial wird verwendet, um eine bestimmte Vorlage in einem eigenen Variablenbereich zu rendern.

  • PartialLoop - PartialLoop ist wie Partial, wird jedoch in der Schleifenumgebung verwendet.

  • Identity - Identität wird verwendet, um die Identität des angemeldeten Benutzers vom Authentifizierungsdienst abzurufen.

  • JSON- JSON wird in einer erholsamen Umgebung verwendet, in der die Ausgabe im JSON-Format erfolgt. Es gibt den richtigen HTTP-Header aus und deaktiviert das Layoutkonzept.

In Zend Framework sind noch viele Helfer verfügbar, wie z i18n helper, form helpers, pagination helpers, navigation helpers, usw.

Ansichtshelfer erstellen

Das Zend Framework bietet eine integrierte Funktion AbstractHelper Umsetzung HelperInterface Ansichtshelfer schreiben.

Die Schritte zum Schreiben eines neuen Helfers sind wie folgt:

  • Step 1 - Erweitern Sie die Klasse Zend \ View \ Helper \ AbstractHelper.

  • Step 2 - Überschreiben Sie die __invoke() Funktion.

  • Step 3 - Stellen Sie die Konfiguration in der ein module.config.php file.

  • Step 4 - Verwenden Sie den Ansichtshelfer in Ansichtsskripten.

Lassen Sie uns jetzt eine erstellen TestHelper

Erstellen Sie einen Hilfsordner unter myapp/module/Tutorial/src/View directory. SchreibenTestHelper im Helper-Verzeichnis, TestHelper.php.

Die vollständige Auflistung ist wie folgt -

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

Konfiguration einstellen in module.config.php.

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

Verwenden Sie die neu erstellte TestHelper in dem about Skript anzeigen.

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