Zend Framework - warstwa widoku

Warstwa widoku to warstwa prezentacji aplikacji MVC. Oddziela logikę aplikacji od logiki prezentacji. W typowej aplikacji internetowej PHP cała logika biznesowa i projekt są ze sobą mieszane. Mieszanie umożliwia szybszy rozwój w małym projekcie. Ale zawodzi żałośnie w dużym projekcie, w którym zaangażowanych jest wiele architektury wysokiego poziomu. Aby zmienić projekt aplikacji internetowej, programista musi również popracować nad logiką biznesową. Może to mieć katastrofalne skutki, powodując złamanie logiki biznesowej.

Zend Framework zapewnia przemyślaną, przejrzystą, elastyczną i rozszerzalną warstwę widoku. Warstwa widoku jest dostępna jako osobny moduł,Zend/View i dobrze integruje się z Zend/Mvcmoduł. Warstwa widoku Zend jest podzielona na wiele komponentów, które dobrze ze sobą współdziałają.

Jego różne składniki są następujące -

  • Variables Containers - Przechowuje dane warstwy widoku.

  • View Models - Posiada zmienne pojemniki i szablon projektu.

  • Renderers - Przetwarzaj dane i szablon z View Model i wyprowadź reprezentację projektu, być może ostateczny wynik HTML.

  • Resolvers - Rozpoznaje szablon dostępny w modelu widoku w taki sposób, aby moduł renderujący mógł je wykorzystać.

  • View (Zend\View\View) - Mapuje żądanie do modułu renderującego, a następnie moduł renderujący do odpowiedzi.

  • Rendering Strategies - Używany przez View do mapowania żądania do renderera.

  • Response Strategies - Używany przez View do mapowania renderera na odpowiedź.

Warstwa widoku, View przetwarza ViewModel, rozwiązuje szablon przy użyciu pliku Resolver, wyrenderuj go za pomocą Rendering Strategy i na koniec wyprowadza go za pomocą Response Renderer.

Wyświetl konfigurację warstw

Podobnie jak kontroler, warstwę widoku można skonfigurować w pliku konfiguracyjnym modułu o nazwie - module.config.php. Główna konfiguracja polega na określeniu, gdzie mają zostać umieszczone szablony. Można to osiągnąć dodając następującą konfigurację w „module.config.php”.

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

Domyślnie warstwa widoku ma domyślne zachowanie dla wszystkich swoich składników. Na przykład plikViewModelrozwiązuje nazwę szablonu akcji kontrolera w katalogu głównym szablonów za pomocą reguły „nazwa-modułu-małymi literami / nazwa-kontrolera-małych liter / nazwa-akcji-małych liter”. Można to jednak zastąpić przezsetTemplate() Metoda ViewModel.

Kontrolery i warstwa widoku

Domyślnie kontroler nie musi przesyłać żadnych danych do warstwy widoku. Wystarczy napisać szablon w odpowiednim miejscu.

Na przykład w naszym przykładzie TutorialController, szablon należy umieścić w myapp/module/Tutorial/view/tutorial/tutorial/index.phtml. Plikindex.phtmlodwołuje się do szablonu opartego na PHP i będzie on renderowany przez PHPRenderer. Istnieją inne programy renderujące, takie jakJsonRenderer dla json wyjście i FeedRenderer dla rss i atom wynik.

Pełna lista jest następująca -

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

Szablon aplikacji Zend

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

Wreszcie pomyślnie ukończyliśmy Tutorial moduł i możemy uzyskać do niego dostęp przez url - http://localhost:8080/tutorial.

Przekazywanie danych do warstwy widoku

Najprostszym sposobem wysłania danych do warstwy widoku jest użycie ViewModelargumenty. ZmienionyindexAction metoda jest następująca -

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

Teraz zmień index.phtml plik w następujący sposób -

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

Zobacz pomocników

Pomocnik widoku służy do pisania małych, atomowych funkcji, które mają być używane w szablonach. Framework Zend dostarcza interfejs Zend \ View \ Helper \ HelperInterface do pisania standardowych helperów.

HelperInterface ma tylko dwie metody,

  • setView() - Ta metoda akceptuje instancję / implementację Zend \ View \ Renderer \ RendererInterface.

  • getView() - Służy do pobierania tej instancji.

Pełna lista kodów HelperInterface wygląda następująco -

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

Aby użyć pomocnika w skrypcie widoku, uzyskaj do niego dostęp za pomocą $this->helperName().

Wbudowani pomocnicy

Zend Framework zapewnia wiele wbudowanych funkcji pomocniczych do różnych celów. Niektóre z pomocników widoku dostępnych wzend-mvc są następujące -

URL

Pomocnik adresu URL służy do generowania adresów URL zgodnych z trasami zdefiniowanymi w aplikacji.

Definicja pomocnika adresu URL to -

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

Na przykład w module samouczka trasa nosi nazwę tutorial i ma dwa parametry action i id. Możemy użyć pomocnika URL do wygenerowania dwóch różnych adresów URL, jak pokazano poniżej -

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

Wynik będzie następujący -

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

Symbol zastępczy

Pomocnik symbolu zastępczego służy do utrwalania zawartości między skryptami widoku i instancjami widoku. Zapewnia opcję początkowego ustawienia danych, a następnie wykorzystania ich na późniejszych etapach.

Na przykład możemy ustawić, powiedzmy company name a następnie używaj go we wszystkich innych miejscach.

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

Symbol zastępczy zapewnia niektóre zaawansowane opcje generowania złożonej zawartości z tablicy i obiektów PHP. Ma również opcję przechwytywania określonej sekcji samego szablonu.

Na przykład poniższy kod przechwytuje wynik szablonu między i przechowuje go w pliku productlist symbol zastępczy.

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

Helper Doctype służy do generowania różnych typów dokumentów HTML. Jest to konkretna implementacjaPlaceholderpomocnik. Doctype można ustawić w pliku bootstrap i pliku konfiguracyjnym.

Podstawowe użycie pokazano poniżej -

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

Helper HeadTitle służy do generowania elementu tytułu HTML. Jest to konkretna realizacjaPlaceholderpomocnik. Zend zapewnia opcję ustawienia tytułu w pliku konfiguracyjnym modułu i można go ustawić na dowolnym poziomie, takim jak witryna, moduł, kontroler, akcja itp. Częściowy kod tytułu nagłówka jest następujący -

Module

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

Template

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

Result

action - controller - module - Zend Framework

HeadMeta

Helper HeadMeta służy do generowania metatagów html. Jest to konkretna implementacja pomocnika Placeholder.

Template -

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

Result

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

HeadLink

Helper HeadLink służy do generowania linków html w celu uwzględnienia zasobów zewnętrznych. Jest to konkretna implementacja pomocnika 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

Pomocnik HeadStyle służy do generowania wbudowanych stylów CSS. Jest to konkretna implementacja pomocnika Placeholder.

Template

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

HeadScript

HeadScript służy do generowania skryptu wbudowanego lub do dołączania skryptów zewnętrznych. Jest to konkretna implementacja pomocnika Placeholder.

Template

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

InlineScript

InlineScript służy do generowania skryptu w sekcji head i body szablonu html. Pochodzi z HeadScript.

HTMLList

HTMLList służy do generowania uporządkowanej i nieuporządkowanej listy. Definicja HTMLList jest następująca -

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>

Cykl

Cykl służy do generowania alternatyw w środowisku pętli. Posiada funkcję assign, next i 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>

Oto kilka innych ważnych wbudowanych pomocników -

  • BasePath - BasePath służy do generowania ścieżki do folderu publicznego katalogu głównego aplikacji.

  • Partial - Częściowe jest używane do renderowania określonego szablonu w jego własnym zakresie zmiennych.

  • PartialLoop - PartialLoop jest podobny do Partial, ale używany w środowisku zapętlonym.

  • Identity - Tożsamość służy do pobierania tożsamości zalogowanego użytkownika z usługi uwierzytelniania.

  • JSON- JSON jest używany w spokojnym środowisku, w którym dane wyjściowe są w formacie JSON. Emituje odpowiedni nagłówek HTTP i wyłącza koncepcję układu.

W Zend Framework wciąż dostępnych jest wiele pomocników, takich jak i18n helper, form helpers, pagination helpers, navigation helpersitp.

Tworzenie pomocników widoku

Zend Framework zapewnia wbudowany AbstractHelper realizowanie HelperInterface napisać pomocników widoku.

Kroki związane z pisaniem nowego pomocnika są następujące -

  • Step 1 - Rozszerz klasę Zend \ View \ Helper \ AbstractHelper.

  • Step 2 - Zastąp __invoke() funkcjonować.

  • Step 3 - Ustaw konfigurację w module.config.php file.

  • Step 4 - Użyj pomocnika widoku w skryptach widoku.

Stwórzmy teraz plik TestHelper

Utwórz folder pomocnika pod adresem myapp/module/Tutorial/src/View directory. pisaćTestHelper wewnątrz katalogu Helpera, TestHelper.php.

Pełna lista jest następująca -

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

Ustaw konfigurację w module.config.php.

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

Użyj nowo utworzonego pliku TestHelper w about zobacz skrypt.

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