Zend View Helper с несколькими методами?

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)

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

Благодарность

Лука


person luca    schedule 13.05.2011    source источник
comment
спасибо дружище спросил это   -  person Roshan Wijesena    schedule 17.01.2013


Ответы (3)


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

$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
 }
person Gordon    schedule 13.05.2011
comment
собирался спросить, можешь ли ты сделать вторую вещь, довольно удобно - person Ascherer; 15.05.2011
comment
Подход getHelper у меня не сработал. Мне пришлось вернуть объект в основной вспомогательный метод, чтобы разрешить вызов других вспомогательных методов. - person webkraller; 21.06.2012

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

Может быть, вы можете передать первый параметр как имя функции и вызвать ее.

e.g.

$this->CommonFunction('showGender', $name)

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

person Jatin Dhoot    schedule 13.05.2011

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

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

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

person Radek Pech    schedule 21.05.2013