zend查看助手有多种方法?

时间:2011-05-13 12:36:16

标签: php zend-framework view-helpers

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 个答案:

答案 0 :(得分:38)

是的,帮助者可以包含其他方法。要调用它们,您必须获取帮助程序实例。这可以通过在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 Helpers包含对View对象的引用,您也可以在View Helper中调用任何可用的View Helpers ,例如

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

答案 1 :(得分:0)

没有这样的规定,但你可以自定义它。

可以将第一个参数作为函数名称传递并调用它。

e.g。

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

这里showGender将在CommonFunction类中定义函数,$ name将是parametr

答案 2 :(得分:0)

这是Gordon建议能够使用更多辅助实例(每个都有自己的属性)的修改:

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,但您可以获得更多实例,每个给定键一个)。