ZF 杂项

1.processRegistrationAction() 形式的Action 要用

http://www.example.org/member/process-registration

形式的URL访问

 

2.插件

插件会对任何请求做出响应,并不关心具体的controller,插件只需要front Controller(前端控制器)注册即可.

此外,对于插件而言,所有的代码都包含在 preDispatch() 或 postDispatch()方法里面.

//插件调用时机
front::dispatch(){ 
//...
  do {
                $this->_request->setDispatched(true);

                /**
                 * Notify plugins of dispatch startup
                 */
                $this->_plugins->preDispatch($this->_request);

                /**
                 * Skip requested action if preDispatch() has reset it
                 */
                if (!$this->_request->isDispatched()) {
                    continue;
                }

                /**
                 * Dispatch request
                 */
                try {
                    $dispatcher->dispatch($this->_request, $this->_response);
                } catch (Exception $e) {
                    if ($this->throwExceptions()) {
                        throw $e;
                    }
                    $this->_response->setException($e);
                }

                /**
                 * Notify plugins of dispatch completion
                 */
                $this->_plugins->postDispatch($this->_request);
            } while (!$this->_request->isDispatched());
//...
}
 

 

 

 

 

3.helper

3.1助手也可以在动作前或后添加一些辅助功能.

3.2 助手有一个direct()方法,当直接调用助手时,direct 方法会被调用。直接调用是指用以下方式调用

$this->_helper->myHelper("Ping");

3.3 Zend_Controller_Action_HelperBroker 助手会在任何控制器初始化时加载,然后初调用来显示脚本模板.

 

   public function Zend_Controller_Action::__construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array())
    {
        $this->setRequest($request)
             ->setResponse($response)
             ->_setInvokeArgs($invokeArgs);
        $this->_helper = new Zend_Controller_Action_HelperBroker($this);
        $this->init();
    }
 

 

//helper 调用时机
dispatcher::dispatch()->Action::dispatch();
Action::dispatch($action)
    {
        // Notify helpers of action preDispatch state
        $this->_helper->notifyPreDispatch();

        $this->preDispatch();
        if ($this->getRequest()->isDispatched()) {
            if (null === $this->_classMethods) {
                $this->_classMethods = get_class_methods($this);
            }

            // preDispatch() didn't change the action, so we can continue
            if ($this->getInvokeArg('useCaseSensitiveActions') || in_array($action, $this->_classMethods)) {
                if ($this->getInvokeArg('useCaseSensitiveActions')) {
                    trigger_error('Using case sensitive actions without word separators is deprecated; please do not rely on this "feature"');
                }
                $this->$action();
            } else {
                $this->__call($action, array());
            }
            $this->postDispatch();
        }

        // whats actually important here is that this action controller is
        // shutting down, regardless of dispatching; notify the helpers of this
        // state
        $this->_helper->notifyPostDispatch();
    }
 

 

从插件与助手的调用时机可以看出:

1。插件是在控制器转发“前” 就由前端控制器进行调用,因此它的作用域是在前端,对所有的控制器都是有效的

2。助手是在控制器转发“后” 由动作调用的,因此它的作用域只限于某一动作内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值