0

我必须在调用视图脚本之前检测路由哪个控制器(因此 postDispatch() 不合适)。

class PerchProvider extends Zend_Controller_Plugin_Abstract
{
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
    //if (--CONTROLLERNAME-- != "Error") {

    include APPLICATION_PATH . '/../public/perch/runtime.php';

    // }
}
}

如何访问控制器的名称?

干杯

4

2 回答 2

0

有趣的是,您正在将 perch 与 Zend 集成!

根据文档 getControllerName 是 Zend_Controller_Request_Abstract 上的一个方法

于 2012-04-11T09:36:38.367 回答
0

您需要注册一个优先级高于视图渲染器的操作助手。

  1. 在您的 Bootstrap.php 中:

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
        protected function _initPerch()
        {
            require APPLICATION_PATH . '/controllers/helpers/Perch.php';
            Zend_Controller_Action_HelperBroker::getStack()->offsetSet(2,
                    new Application_Controller_Helper_Perch());
        }
    }
    
  2. 在 application/controllers/helpers/Perch.php 中:

    <?php
    
    class Application_Controller_Helper_Perch 
            extends Zend_Controller_Action_Helper_Abstract
    {
        public function postDispatch()
        {
            $request = $this->getActionController()->getRequest();
            $controller = $request->getControllerName();
            if ($controller != 'error') {
                include APPLICATION_PATH . '/../public/perch/runtime.php';
            }
        }
    }
    
于 2012-04-11T10:58:43.617 回答