Zend Framework-Zend_View视图协助器

14.4. 视图协助器(View Helper)

在你的视图脚本中,经常需要执行某些特定的复杂的函数,例如,格式化日期,生成表单对象,或者显示action的链接等等。你可以使用协助器类来完成这些工作。

你可以用$this->helperName()来调用helper。这时Zend_View会加载 Zend_View_Helper_HelperName类,建立一个对象实例,并调用它的helperName()方法。对象的实例会在 Zend_View的实例内一直存在,并可以被$this->helperName()重复调用。

14.4.1. 基本的协助器

Zend_View自带了几个helper类,都是用来生成组件的。每个都有自动过滤变量的功能。

  • formButton($name, $value, $attribs): 生成<input type="button" />

  • formCheckbox($name, $value, $attribs, $options): 生成<input type="checkbox" />,$options参数是一个数组,第一个值是“checked”,第二个值是"unchecked"(默认为“1”和"0")。如果$ value匹配"checked"值,则这个checkbox显示为已选中。

  • formFile($name, $value, $attribs): 生成<input type="file" />

  • formHidden($name, $value, $attribs): 生成<input type="hidden" />

  • formPassword($name, $value, $attribs): 生成<input type="password" />

  • formRadio($name, $value, $attribs, $options): 生成一系列<input type="button" />,每个$options数组元素一个,key为radio的值,并且元素的值是radio的标签。

  • formReset($name, $value, $attribs): 生成<input type="reset" />

  • formSelect($name, $value, $attribs, $options): 建立一个<select>...</select>标签,其中的每个<option>对应于一个$option数组 元素。元素的key是option的值,元素的值是option的标签。$value这个值的option默认为选中。

  • formSubmit($name, $value, $attribs): 生成<input type="submit" />

  • formText($name, $value, $attribs): 生成<input type="text" />

  • formTextarea($name, $value, $attribs): 生成<textarea>...</textarea>

使用非常简单,下面是个例子。


<?php
// inside your view script, $this refers to the Zend_View instance.
// 
// say that you have already assigned a series of select options under
// the name $countries as array('us' => 'United States', 'il' =>
// 'Israel', 'de' => 'Germany').
?>
<form action="action.php" method="post">
    <p><label>Your Email:
        <?php echo $this->formText('email''you@example.com', array('size' => 32)) ?>
    </label></p>
    <p><label>Your Country:
        <?php echo $this->formSelect('country''us'null$this->countries?>
    </label></p>
    <p><label>Would you like to opt in?
        <?php echo $this->formCheckbox('opt_in''yes'null, array('yes''no'?>
    </label></p>
</form>

以上视图脚本会输出这样的结果:


<form action="action.php" method="post">
    <p><label>Your Email:
        <input type="text" name="email" value="you@example.com" size="32" />
    </label></p>
    <p><label>Your Country:
        <select name="country">
            <option value="us" selected="selected">United States</option>
            <option value="il">Israel</option>
            <option value="de">Germany</option>
        </select>
    </label></p>
    <p><label>Would you like to opt in?
        <input type="hidden" name="opt_in" value="no" />
        <input type="checkbox" name="opt_in" value="yes" checked="checked" />
    </label></p>
</form>

14.4.2. Helper 的路径

就像视图脚本那样,你的控制器也可以设定helper的路径给Zend_View。默认地,Zend_View会到 “Zend/View/Helper/”下查找helper类。你可以用setHelperPath() 和 addHelperPath()来定义自己的路径。


<?php
$view 
= new Zend_View();
$view->setHelperPath('/path/to/more/helpers');
?>

你可以用addHelperPath()来增加helper的路径, Zend_View将使用最近增加的路径。这样你可以使用自己的helper。


<?php
$view 
= new Zend_View();
$view->addHelperPath('/path/to/some/helpers');
$view->addHelperPath('/other/path/to/helpers');

// now when you call $this->helperName(), Zend_View will look first for
// "/other/path/to/helpers/HelperName.php", then for
// "/path/to/some/helpers/HelperName", and finally for
// "Zend/View/Helpers/HelperName.php".
?>

14.4.3. 编写自定义的Helper类

编写自定义的Helper类很容易,只要遵循以下几个原则即可:

  • 类名必须是 Zend_View_Helper_*,*是helper的名称。例如,你在写一个名为“specialPurpose”的类,类名将是Zend_View_Helper_SpecialPurpose(注意大小写)

  • 类必须有一个public的方法,方法名与helper名称相同。这个方法将在你的模板调用"$this->specialPurpose()"时 执行。在我们的“specialPurpose”例子中,相应的方法声明可以是“public function specialPurpose()”。

  • 一般来说,Helper类不应该echo或print或有其它形式的输出。它只需要返回值就可以了。返回的值应当被过滤。

  • 类文件的命名应该是helper方法的名称,比如在"specialPurpose"例子中,文件要存为“SpecialPurpose.php”。

把helper类的文件放在你的helper路径下, Zend_View就会自动加载,实例化,持久化,并执行。

下面是一个例子:


<?php
class Zend_View_Helper_SpecialPurpose {
    protected 
$_count 0;
    public function 
specialPurpose()
    {
        
$this->_count++;
        
$output "I have seen 'The Jerk' {$this->_count} time(s).";
        return 
htmlspecialchars($output);
    }
}
?>

在视图代码中,你可以调用SpecialPurpose协助器任意次。它只需要实例化一次,就会在Zend_View实例的生命周期内持久存在。


<?php
// remember, in a view script, $this refers to the Zend_View instance.
echo $this->specialPurpose();
echo 
$this->specialPurpose();
echo 
$this->specialPurpose();
?>

输出是这样的:


I have seen 'The Jerk' 1 time(s).
I have seen 'The Jerk' 2 time(s).
I have seen 'The Jerk' 3 time(s).
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值