View Helper

View Helper khá giống với Controller Plugin, nó mở rộng chức năng cho template, bạn có thể gọi các Helper này trong template để thực hiện render các HTML đặc trưng nào đó, hoặc các tác vụ nào đó. Mỗi view helper giống với các widget (menu, navigator ...).

Trong template .phtml $this trỏ đến đối tượng PhpRender, để gọi một helper thường dùng cú pháp: $this->namehelper()

Các Helper hay dùng

Helper Chi tiết
BasePath Lấy địa chỉ theo base path.
Url URL từ route
ServerUrl URL server
Doctype Lấy doctype
HeadTitle Thiết lập Title của trang
HtmlList Sinh mã HTML list : ul/ol
ViewModel Lấy ViewModel
Layout Lấy template layout (template gốc)
Partial Dựng HTML từ một template khác $this->Partial($template)
InlineScript Lấy, thiết lập mã JS cho trang
Identity Lấy định danh User đang truy cập
FlashMessenger Lấy FashMessage
EscapeHtml escape chuỗi ví dụ biến < thành &lg;

Ví dụ, mở about.phtml ở ví dụ bài trước, cập nhật lại như sau và chạy thử

<h1>Giới thiệu</h1>
<h2>BasePath</h2>
<p><?=$this->BasePath()?></p>
<p>
    <?=$this->BasePath('public/css/mycss.css')?>
</p>
<h2>Url</h2>
<p>Home: <?=$this->url('home')?></p>
<p>About: <?=$this->url('application', ['action'=>'about'])?></p>

<h2>ServerUrl</h2>
<p><?=$this->ServerUrl()?></p>

<h2>doctype</h2>
<?=$this->EscapeHtml($this->doctype()) ?>
<h2>HeadTitle</h2>
<?=$this->HeadTitle('Tiêu đề trang') ?>

<h2>HtmlList</h2>
<?
    $items = [
        'Cấp 1',
        [
            'Cấp 2',
            'Cấp 2',
            [
                'Cấp 3',
                'Cấp 3'
            ],
            'Cấp 2'
        ],
        'Cấp 1'
    ];

    $attribs = array(
        'class' => 'foo',
    );

?>
<h3>UL</h3>
<?=$this->HtmlList($items) ?>

<h3>OL</h3>
<?=$this->HtmlList($items, true, $attribs) ?>

Tạo Helper riêng

Đơn giản bạn tạo ra lớp kế thừa Zend\View\Helper\AbstractHelper

Ví dụ tạo ra lớp Helper có tên MyHelper

//File: module/Application/src/Helper/MyHelper.php

<?php
namespace Application\Helper;

use Zend\View\Helper\AbstractHelper;
class MyHelper extends AbstractHelper
{
    public function __invoke($text)
    {
        return "<quote class='myclass'>$text</quote>";
    }

}

Sau khi có lớp Helper \Application\Helper\MyHelper như trên, đăng ký vào hệ thống, thêm vào module.config.php với một key mới và nội dung như sau

'view_helpers'=>[
    'invokables' => [ //ngoài ra có factories ... xem controller plugin
        'testhelper'       => \Application\Helper\MyHelper::class,
    ],
],

Giờ các template đã có một view helper tên là testhelper, mở file about.pthml cập nhật nội dung sau rồi chạy thử kiểm tra

<h1>Giới thiệu</h1>
<?=$this->testhelper("THIS IS HELPER"); ?>