【问题标题】:Get controller name in Bootstrap在 Bootstrap 中获取控制器名称
【发布时间】:2012-02-06 21:41:16
【问题描述】:

我想根据我的引导文件中的控制器名称加载一个额外的配置文件,所以我必须在引导程序中获取控制器的名称(在 Zend Framework 1.1 中)。这可能吗?

我试过了:

$front = Zend_Controller_Front::getInstance();
$controller = $front->getRequest()->getControllerName();

但这不起作用:

Fatal error: Call to a member function getControllerName() on a non-object in [path]\application\Bootstrap.php on line 10

【问题讨论】:

    标签: zend-framework model-view-controller controller bootstrapping


    【解决方案1】:

    你也可以这样做:

            $router = new Zend_Controller_Router_Rewrite();
            $request = new Zend_Controller_Request_Http();
            $router->route($request);
            $request->getActionName();
    

    【讨论】:

      【解决方案2】:

      您必须先引导前端控制器才能使用它。

      $bootstrap->bootstrap('frontController');
      $front = $bootstrap->frontController;
      $controller = $front->getRequest()->getControllerName();
      

      【讨论】:

        【解决方案3】:

        您需要先通过引导前端控制器来初始化请求对象

        Bootstrap 类中的使用示例:

        $this->bootstrap('frontController');
        $request = $this->getResource('frontController')->getRequest();
        $controller = $request->getControllerName();
        

        您不应该在引导文件中使用请求对象。

        更好的解决方案是使用前端控制器插件及其pre-/postDispatch() 方法来实现此目的。

        如果您背后有更复杂的逻辑,或者您需要为每个控制器提供更多便利方法,您可以扩展 Zend_Controller_Action 类。

        【讨论】:

        • 我添加了Songos的解决方案,写的更通俗一点。
        • 对不起,但最初的答案是自己解析 URL,所以我不能赞成,尤其是在完全改变整个答案时。不敢相信人们对此的支持超过了公认的答案。
        猜你喜欢
        • 2013-11-01
        • 2010-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-04
        • 1970-01-01
        • 2013-08-17
        • 1970-01-01
        相关资源
        最近更新 更多