zend framework中的helper们

2008-11-06 00:28

写程序的时候,或多或少都会需要一些helper类,来减少一些重复的工作,但对helper的确立并不明确,大多数程序员喜欢称他们为common,tools,utility之类,而在mvc的领域,helper的概念则十分明确,就是来帮助开发的。
zend fx 的mvc的helper:

1.Zend_Controller_Action_Helper
在爽快地写一个个action的时候,难免需要一些重定向啊,构造url之类的需要,如果你想在当前controller里写几个私有的方法供几个action调用,是可以,但其他controller有类似需求,你难道又写一个?那好,写在基类里?多个controller都能用了,但是,这些controller应该包含这个职责吗?写在一个php文件里,include下?ok,你都做到这步了,那要框架干嘛。还是把这些琐碎的小东西交给helper来完成吧。
例如官方例子里:在某个controller里的某个action里
代码段1
$flashMessenger = $this->_helper->getHelper('FlashMessenger');
$flashMessenger->addMessage('We did something in the last request');

代码段2
$flashMessenger = $this->_helper->FlashMessenger;
$flashMessenger->addMessage('We did something in the last request');

代码段3
$this->_helper->FlashMessenger('We did something in the last request');

三段代码一样的效果,无非是___get和__call的使用,zf和ror一样,喜欢用flash来做sample

看看核心代码
 public function __call($method, $args)
    {
        $helper = $this->getHelper($method);
        if (method_exists($helper, 'direct')) {
            return call_user_func_array(array($helper, 'direct'), $args);
        }

        throw new Zend_Controller_Action_Exception('Helper "' . $method . '" does not support overloading via direct()');
    }

    public function __get($name)
    {
        return $this->getHelper($name);
    }

内置的action helper有不少,在 zend/controller/action/helper里可以找到,最有用的应该是url,viewrender和redirector
看看这些文件,仿造一个你需要的helper来,就很容易了

2.Zend_View_Helper
写网页的,前台输出的东西往往是最复杂的,指望所有东西都从controller里set过来,不是很方便,代码也很冗余,使用view helper,还是能简化不少工作,使代码更清晰
打开quickstart框架自带的/application/layouts/scripts/layout.phtml,就能看到相当多对action helper的使用:$this->doctype(),$this->headLink(),$this->layout()等等。
这些都是访问内置的zend/view/helper里的文件,从语法上看,在view里使用view helper比在action里使用action helper还要更直接,更简单些。从自己编写一个helper的代价而言,view helper也更为简单,遵循方法名首字母小写就可以实现直接调用
以Url.php的代码为例:
class Zend_View_Helper_Url extends Zend_View_Helper_Abstract
{
   
    public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
    {
        $router = Zend_Controller_Front::getInstance()->getRouter();
        return $router->assemble($urlOptions, $name, $reset, $encode);
    }
}
写好view helper文件,扔到这个目录下就能用了,为了保持独立性,你也可以设置helper的目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值