Помощники видов в Zend Framework

Настало время немного разъяснить, что представляют из себя помощники видов в Zend Framework. Zend Framework предоставляет компоненту Zend_View, которая позволяет создавать помощники видов. Их использование выглядит примерно так:
<?php echo $this->myHelper('myParam1'); ?>

А сам помощник вида примерно вот так:
<?php
 
class Zend_View_Helper_MyHelper extends Zend_View_Helper_Abstract
{
    public function myHelper($myParam1)
    {
        $html = '';
        // some logic that fills in $html.
        return $html;
    }
}

Тут необходимо отметить две детали. Первая это то, что любой помощник выводит строку. Вторая, то, что Zend_View_Helper_ это префикс.

В стандартной комплектации проекта на Zend Framework данные помощники видов размещаются в специальном каталоге под названием helpers->views. Так же каталог helpers может находиться в папке layouts. Если вы помещаете помощник видов в один из этих каталогов, то префикс будет следующим Zend_View_Helper_.

Но это не строгое ограничение - мы можем располагать наших помощников в любой папке. Обычно разработчики хранят их в папке library/App/View/Helper/, так что префикс App_View_Helper_ тут уже не сработает. Для того, чтобы всё было пучком следует добавить запись в application.ini:

resources.view.helperPath.App_View_Helper_ = "App/View/Helper/"
Теперь помощники видов располагаются в App/View/Helper/MyHelper.php и выглядят следующим образом:
<?php
 
class App_View_Helper_MyHelper extends Zend_View_Helper_Abstract
{
    public function myHelper($myParam1)
    {
        $html = '';
        // some logic that fills in $html.
        return $html;
    }
}

После того, как вы наследуете от класса Zend_View_Helper_Abstract для создания собственного хелпера, то вам надо получить доступ к объекту вида. Это необходимо для того, чтобы получать доступ к другим помощникам вида, таким как к примеру escape.

Допустим, мы хотим создать таблицу из массива, который выглядит следующим образом:
$data = array();
$data[] = array('Name', 'Email');
$data[] = array('Alison', 'alison@example.com');
$data[] = array('Bert', 'bert@example.com');
$data[] = array('Charlie', 'charlie@example.com');

Вывод:
<?php echo $this->tabulate($this->data, array('class'=>'tabulated')); ?>

А сам помощник вида будет выглядеть так:
<?php
 
class App_View_Helper_Tabulate extends Zend_View_Helper_Abstract
{
    public function tabulate ($data, $attribs = array())
    {
        $attribString = '';
        foreach ($attribs as $key => $value) {
            $attribString .= ' ' . $key .'="' . $value . '"';
        }
 
        $header = array_shift($data);
        $html = "<table $attribString>\n<tr>\n";
        foreach ($header as $cell) {
            $escapedCell = $this->view->escape($cell);
            $html .= "<th>$escapedCell</th>\n";
        }
        $html .= "</tr>\n";
        foreach ($data as $row) {
            $html .= "<tr>\n";
            foreach ($row as $cell) {
                $escapedCell = $this->view->escape($cell);
                $html .= "<td>$escapedCell</td>\n";
            }
            $html .= "</tr>\n";
        }
 
        $html .= '</table>';
        return $html;
    }
}

Напоследок хочу напомнить, что префиксы можно задавать какие угодно:
resources.view.helperPath.Akrabat_View_Helper_ = "Akrabat/View/Helper/"
resources.view.helperPath.App_View_Helper_ = "App/View/Helper/"

Так же старайтесь давать уникальные имена вашим помощникам иначе они могут быть перезаписаны и не вызываться там, где вы этого ожидаете. Ну и наоборот. Если вас не устраивает встроенные хелперы в Zend Framework, то вы всегда можете заместить их своими собственными.
Теги:
вид
Добавлено: 08 Мая 2018 12:28:43 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...