помощник просмотра zend с несколькими методами?


class My_View_Helper_Gender extends Zend_View_Helper_Abstract
{
  public function Gender()
  {
    //
  }
}

"The class method (Gender()) must be named identically to the concliding part 
 of your class name(Gender).Likewise,the helper's file name must be named 
 identically to the method,and include the .php extension(Gender.php)"
 (Easyphp websites J.Gilmore)

Мой вопрос таков: Может ли Помощник представления содержать более одного метода?И могу ли я вызвать других помощников просмотра из моего помощника?

Спасибо

Лука

Author: luca, 2011-05-13

3 answers

Да, помощники могут содержать дополнительные методы . Чтобы вызвать их, вам нужно получить вспомогательный экземпляр. Это может быть достигнуто либо путем получения вспомогательного экземпляра в представлении

$genderHelper = $this->getHelper('Gender');
echo $genderHelper->otherMethod();

Или с помощью помощника, возвращающего себя из основного вспомогательного метода:

class My_View_Helper_Gender extends Zend_View_Helper_Abstract
{
  public function Gender()
  {
    return $this;
  }
  // … more code
}

А затем позвоните $this->gender()->otherMethod()

Поскольку помощники представления содержат ссылку на объект представления, вы также можете вызвать любые доступные помощники представления из Помощника представления, например

 public function Gender()
 {
     echo $this->view->translate('gender');
     // … more code
 }
 38
Author: Gordon, 2011-05-13 20:09:52

Такого положения нет, но вы можете настроить его.

Возможно, вы можете передать первый параметр в качестве имени функции и вызвать его.

Например,

$это->Общая функция ('Showgender', $имя)

Здесь showGender будет функцией, определенной в классе CommonFunction, а $name будет параметром

 0
Author: Jatin Dhoot, 2011-05-13 12:45:47

Это модификация предложения Гордона, позволяющая использовать больше экземпляров помощника (каждый со своими свойствами):

class My_View_Helper_Factory extends Zend_View_Helper_Abstract {
    private static $instances = array();
    private $options;

    public static function factory($id) {
        if (!array_key_exists($id, self::$instances)) {
            self::$instances[$id] = new self();
        }
        return self::$instances[$id];
    }

    public function setOptions($options = array()) {
        $this->options = $options;
        return $this;
    }

    public function open() {
       //...
    }

    public function close() {
       //...
    }
}

Вы можете использовать помощника следующим образом:

$this->factory('instance_1')->setOptions($options[1])->open();
//...
    $this->factory('instance_2')->setOptions($options[2])->open();
    //...
    $this->factory('instance_2')->close();
//...
$this->factory('instance_1')->close();

Редактировать: Это шаблон проектирования, называемый многотонным (например, одноэлементный, но вы можете получить больше экземпляров, по одному на каждый данный ключ).

 0
Author: Radek Pech, 2013-06-27 09:04:08