Zend Framework - Lớp xem

Lớp View là lớp trình bày của ứng dụng MVC. Nó tách logic ứng dụng khỏi logic trình bày. Trong một ứng dụng web PHP điển hình, tất cả logic nghiệp vụ và thiết kế được trộn lẫn với nhau. Trộn lẫn cho phép phát triển nhanh hơn trong một dự án nhỏ. Nhưng, nó thất bại thảm hại trong một dự án lớn, nơi có nhiều kiến ​​trúc cấp cao tham gia. Để thay đổi thiết kế của ứng dụng web, một nhà phát triển cũng cần phải làm việc trên logic nghiệp vụ. Điều này có thể là thảm họa dẫn đến phá vỡ logic kinh doanh.

Zend Framework cung cấp một lớp View tốt, sạch sẽ, linh hoạt và có thể mở rộng. Lớp View có sẵn dưới dạng một mô-đun riêng biệt,Zend/View và tích hợp tốt với Zend/Mvcmô-đun. Lớp Zend View được tách thành nhiều thành phần tương tác độc đáo với nhau.

Các thành phần khác nhau của nó như sau:

  • Variables Containers - Lưu trữ dữ liệu của lớp xem.

  • View Models - Giữ các hộp chứa có thể thay đổi và mẫu thiết kế.

  • Renderers - Xử lý dữ liệu và mẫu từ View Model và xuất ra biểu diễn thiết kế, có thể là đầu ra html cuối cùng.

  • Resolvers - Giải quyết mẫu có sẵn trong View Model theo cách mà Trình kết xuất có thể sử dụng.

  • View (Zend\View\View) - Bản đồ yêu cầu trình kết xuất và sau đó trình kết xuất phản hồi.

  • Rendering Strategies - Được sử dụng bởi View để ánh xạ yêu cầu đến trình kết xuất.

  • Response Strategies - Được sử dụng bởi View để trình kết xuất bản đồ phản hồi.

Lớp xem, View xử lý ViewModel, giải quyết mẫu bằng cách sử dụng Resolver, kết xuất nó bằng cách sử dụng Rendering Strategy và cuối cùng xuất ra nó bằng cách sử dụng Response Renderer.

Xem cấu hình lớp

Giống như bộ điều khiển, lớp Xem có thể được định cấu hình trong tệp cấu hình của mô-đun được gọi là - module.config.php. Cấu hình chính là chỉ định nơi các mẫu sẽ được đặt. Điều này có thể được thực hiện bằng cách thêm cấu hình sau vào “module.config.php”.

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

Theo mặc định, lớp View có một hành vi mặc định cho tất cả các thành phần của nó. Ví dụ, mộtViewModelgiải quyết tên mẫu của hành động của bộ điều khiển bên trong gốc mẫu theo quy tắc “lowercase-module-name / lowercase-controller-name / lowercase-action-name”. Tuy nhiên, điều này có thể bị ghi đè bởisetTemplate() của ViewModel.

Bộ điều khiển và Lớp xem

Theo mặc định, bộ điều khiển không cần gửi bất kỳ dữ liệu nào đến lớp xem. Chỉ cần viết mẫu ở vị trí thích hợp là đủ.

Ví dụ, trong ví dụ của chúng tôi, TutorialController, mẫu cần được đặt tại myapp/module/Tutorial/view/tutorial/tutorial/index.phtml. Cácindex.phtmlđề cập đến mẫu dựa trên PHP và nó sẽ được PHPRenderer kết xuất. Có các trình kết xuất khác nhưJsonRenderer cho json đầu ra và FeedRenderer cho rssatom đầu ra.

Danh sách đầy đủ như sau:

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

Mẫu ứng dụng Zend

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

Cuối cùng, chúng tôi đã hoàn thành thành công Tutorial và chúng tôi có thể truy cập nó bằng cách sử dụng url - http://localhost:8080/tutorial.

Chuyển dữ liệu đến lớp xem

Cách đơn giản nhất để gửi dữ liệu đến lớp xem là sử dụng ViewModeltranh luận. Sự thay đổiindexAction phương pháp như sau:

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

Bây giờ, hãy thay đổi index.phtml tập tin như sau -

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

Xem người trợ giúp

Trình trợ giúp Chế độ xem được sử dụng để viết các hàm nguyên tử nhỏ được sử dụng trong các mẫu. Zend framework cung cấp một giao diện, Zend \ View \ Helper \ HelperInterface để viết các trình trợ giúp chế độ xem chuẩn.

Một HelperInterface chỉ có hai phương thức,

  • setView() - Phương thức này chấp nhận một thực thể / thực hiện Zend \ View \ Renderer \ RendererInterface.

  • getView() - Nó được sử dụng để lấy thể hiện đó.

Danh sách mã hoàn chỉnh của HelperInterface như sau -

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

Để sử dụng một trình trợ giúp trong tập lệnh xem của bạn, hãy truy cập nó bằng $this->helperName().

Người trợ giúp tích hợp

Zend Framework cung cấp rất nhiều chức năng trợ giúp có sẵn cho các mục đích khác nhau. Một số Trình trợ giúp Chế độ xem có sẵn trongzend-mvc như sau -

URL

Trình trợ giúp URL được sử dụng để tạo các URL khớp với các tuyến được xác định trong ứng dụng.

Định nghĩa của trình trợ giúp URL là -

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

Ví dụ: trong mô-đun hướng dẫn, tuyến đường được đặt tên là tutorial và nó có hai tham số actionid. Chúng tôi có thể sử dụng trình trợ giúp URL để tạo hai URL khác nhau như được hiển thị bên dưới -

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

Kết quả sẽ như sau:

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

Trình giữ chỗ

Trình trợ giúp giữ chỗ được sử dụng để duy trì nội dung giữa các tập lệnh xem và các phiên bản xem. Nó cung cấp tùy chọn để thiết lập dữ liệu ban đầu và sau đó sử dụng nó trong các giai đoạn sau.

Ví dụ, chúng ta có thể đặt, nói company name và sau đó sử dụng nó ở tất cả những nơi khác.

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

Trình giữ chỗ cung cấp một số tùy chọn nâng cao để tạo nội dung phức tạp từ mảng và đối tượng PHP. Nó cũng có tùy chọn để nắm bắt phần nhất định của chính mẫu.

Ví dụ: đoạn mã sau ghi lại kết quả mẫu ở giữa và lưu trữ nó trong productlist trình giữ chỗ.

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

Trình trợ giúp Doctype được sử dụng để tạo các loại tài liệu html khác nhau. Đó là việc thực hiện cụ thểPlaceholderngười giúp đỡ. Loại tài liệu có thể được đặt trong tệp bootstrap và tệp cấu hình.

Cách sử dụng cơ bản được hiển thị bên dưới -

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

Trình trợ giúp HeadTitle được sử dụng để tạo phần tử tiêu đề html. Đó là việc thực hiện cụ thểPlaceholderngười giúp đỡ. Zend cung cấp một tùy chọn để đặt tiêu đề trong tệp cấu hình mô-đun và nó có thể được đặt ở bất kỳ cấp nào như trang web, mô-đun, bộ điều khiển, hành động, v.v. Một phần mã cho HeadTitle như sau:

Module

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

Template

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

Result

action - controller - module - Zend Framework

HeadMeta

Trình trợ giúp HeadMeta được sử dụng để tạo các thẻ meta html. Đó là một triển khai cụ thể của Trình trợ giúp Trình giữ chỗ.

Template -

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

Result

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

HeadLink

Trình trợ giúp HeadLink được sử dụng để tạo các liên kết html để bao gồm các tài nguyên bên ngoài. Đó là triển khai cụ thể của Trình trợ giúp Trình giữ chỗ.

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

Trình trợ giúp HeadStyle được sử dụng để tạo các kiểu CSS nội tuyến. Đó là triển khai cụ thể của Trình trợ giúp Trình giữ chỗ.

Template

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

HeadScript

HeadScript được sử dụng để tạo tập lệnh nội tuyến hoặc bao gồm các tập lệnh bên ngoài. Đó là triển khai cụ thể của Trình trợ giúp Trình giữ chỗ.

Template

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

InlineScript

InlineScript được sử dụng để tạo một tập lệnh trong cả phần đầu và phần nội dung của mẫu html. Nó có nguồn gốc từ HeadScript.

HTMLList

HTMLList được sử dụng để tạo danh sách có thứ tự và không có thứ tự. Định nghĩa của HTMLList như sau:

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>

Đi xe đạp

Chu kỳ được sử dụng để tạo ra các lựa chọn thay thế trong môi trường vòng lặp. Nó có chức năng gán, tiếp theo và trước.

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>

Một số trợ giúp quan trọng khác được tích hợp sẵn như sau:

  • BasePath - BasePath được sử dụng để tạo đường dẫn của thư mục chung của thư mục gốc của ứng dụng.

  • Partial - Một phần được sử dụng để kết xuất một mẫu cụ thể trong phạm vi biến của riêng nó.

  • PartialLoop - PartialLoop giống như Partial, nhưng được sử dụng trong môi trường lặp.

  • Identity - Danh tính được sử dụng để truy xuất danh tính của người dùng đã đăng nhập từ Dịch vụ xác thực.

  • JSON- JSON được sử dụng trong môi trường yên tĩnh, nơi đầu ra ở định dạng JSON. Nó phát ra tiêu đề HTTP thích hợp và vô hiệu hóa khái niệm bố cục.

Vẫn còn rất nhiều trợ giúp có sẵn trong Zend Framework chẳng hạn như i18n helper, form helpers, pagination helpers, navigation helpers, Vân vân.

Tạo View Helpers

Zend Framework cung cấp một AbstractHelper thực thi HelperInterface để viết người trợ giúp xem.

Các bước liên quan đến việc viết một trình trợ giúp mới như sau:

  • Step 1 - Mở rộng lớp Zend \ View \ Helper \ AbstractHelper.

  • Step 2 - Ghi đè __invoke() chức năng.

  • Step 3 - Đặt cấu hình trong module.config.php file.

  • Step 4 - Sử dụng trình trợ giúp chế độ xem trong các tập lệnh xem.

Bây giờ chúng ta hãy tạo một TestHelper

Tạo thư mục Người trợ giúp tại myapp/module/Tutorial/src/View directory. ViếtTestHelper bên trong thư mục Người trợ giúp, TestHelper.php.

Danh sách đầy đủ như sau:

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

Đặt cấu hình trong module.config.php.

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

Sử dụng cái mới được tạo TestHelper bên trong about xem kịch bản.

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