Подтвердить что ты не робот

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 file name must be named 
 identically to the method,and include the .php extension(Gender.php)"
 (Easyphp websites J.Gilmore)

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

спасибо

Лука

4b9b3361

Ответ 1

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

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

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

 public function Gender()
 {
     echo $this->view->translate('gender');
     // … more code
 }

Ответ 2

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

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

например.

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

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

Ответ 3

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

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, но вы можете получить больше экземпляров, по одному на заданный ключ).