Zend View Helper с несколькими методами? - PullRequest
18 голосов
/ 13 мая 2011
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)

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

спасибо

Лука

Ответы [ 3 ]

38 голосов
/ 13 мая 2011

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

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

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

 public function Gender()
 {
     echo $this->view->translate('gender');
     // … more code
 }
0 голосов
/ 21 мая 2013

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

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

0 голосов
/ 13 мая 2011

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

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

например,

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

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

...