Подфункции на Zend ViewHelper

Искам да добавя повече от една функция към ViewHelper. Обикновено има една функция, наречена като класа и като името на файла.

Как мога да добавя няколко функции в един ViewHelper?

напр. като този:

class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
    public function Horizontal($parameter)
    {
         return "...";
    }
}

echo $this->MyMenuHelper()->Horizontal($parameter);


person danijar    schedule 08.12.2011    source източник


Отговори (3)


Алекс беше на прав път, но пропусна нещо в отговора си: действителният метод myMenuHelper() трябва да върне самия помощник на изгледа, за да работи това:

class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
    public function myMenuHelper()
    {
        return $this;
    }

    public function horizontal() { ... }

    // more methods...
}

И след това, както споменахме:

echo $this->myMenuHelper()->horizontal();
person BenMorel    schedule 25.01.2012

Понякога не искате да преминете през основния метод на помощник за изглед, въпреки че не е толкова лошо за някои видове логика. В такъв случай използвайте getHelper():

class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
    public function myMenuHelper()
    {
        // some logic, maybe the main one
    }

    public function horizontal() 
    {    
        // some other logic
    }
}

Следните примери напълно заобикалят myMenuHelper():

// in controller
$this->view->getHelper('MyMenuHelper')->horizontal();

// in view
$this->getHelper('MyMenuHelper')->horizontal();`

В някои случаи например попълвам помощника на изгледа с някои вътрешни данни в контролера, като извиквам основния му метод директно в изгледа, който действа върху тези данни.

// in controller
$this->view->getHelper('MyMenuHelper')->storeData($someArray);

// in view
$this->myMenuHelper(); // iterates over $someArray
person nevvermind    schedule 28.01.2012

опитайте се да започнете името на функцията с малка буква

        class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
        {
                public function horizontal($parameter)
                {
                       return "...";
                }
        }

в изгледа:

        echo $this->myMenuHelper()->horizontal($parameter);
person Alex    schedule 08.12.2011
comment
Грешка Call to a member function horizontal() on a non-object [in view script] - person danijar; 09.12.2011