Model view controller 从控制器或窗体内解析视图辅助对象位置

Model view controller 从控制器或窗体内解析视图辅助对象位置,model-view-controller,zend-framework,view-helpers,Model View Controller,Zend Framework,View Helpers,我有一些视图助手,可以在需要时添加JavaScript文件(例如,只有表单使用CKEditor等)。我的目录结构(简化为仅包含相关文件)如下: 我想做的是: 在视图中包含CKEditorproject/project/issueadd 在project/project/version 当我在视图脚本中时,调用就像一个符咒,即使助手位于默认模块的helpers目录中。但是,对于控制器和窗体,情况并非如此 在控制器ProjectController.php,versionAction(),我试图调用

我有一些视图助手,可以在需要时添加JavaScript文件(例如,只有表单使用CKEditor等)。我的目录结构(简化为仅包含相关文件)如下:

我想做的是:

  • 在视图中包含CKEditor
    project/project/issueadd
  • project/project/version
  • 当我在视图脚本中时,调用
    就像一个符咒,即使助手位于默认模块的helpers目录中。但是,对于控制器和窗体,情况并非如此

    在控制器
    ProjectController.php
    versionAction()
    ,我试图调用:

    $this->view->jQueryUI();
    
    结果是一个例外:

    消息:在注册表中找不到名为“JQueryUI”的插件;使用的路径:项目\视图\辅助工具\ C:/xampp/htdocs/bugraid/application/modules/Project/views\helpers/Zend\视图\辅助工具\辅助工具:Zend/View/Helper/

    类似地,在
    AddIssue.php
    表单中,我尝试了以下方法:

    $this->getView()->wysiwyg();
    
    还有一个例外:

    消息:在注册表中未找到名为“Wysiwyg”的插件;使用的路径:项目\视图\辅助工具\ C:/xampp/htdocs/bugraid/application/modules/Project/views\helpers/Zend\视图\辅助工具\辅助工具:Zend/View/Helper/

    显然,如果我的视图帮助程序位于调用它们的模块/控制器的帮助程序目录中,这两种方法都可以工作,但是由于它们在许多模块中使用,我希望它们位于默认模块的视图帮助程序目录中

    因此,我的问题是:

  • 如何从控制器和表单中访问这些视图帮助程序
  • 有没有更简单的方法来解决这个问题(除了简单地在布局中包含所有javascript文件之外)?比如创建插件或动作助手?(我以前没有做过这些事情,所以我真的不知道,我只是从ZF开始我的冒险)
  • 关于Q1(基于评论)。您应该能够以常规方式访问助手。但是,由于它不起作用,我认为引导视图资源的方式和/或执行帮助程序的具体注册的方式或向其添加帮助程序路径的方式存在问题。我粘贴了一个在Bootsrap.php中添加助手路径的示例:

    <?php
    #file: APPLICATION_PATH/Bootstrapt.php
    
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    
        public function _initViewHelperPath() {
    
            $this->bootstrap('view');
            $view = $this->getResource('view');
    
              $view->addHelperPath(
                    APPLICATION_PATH . '/modules/default/views/helpers',
                    'My_View_Helper' // <- this should be your helper class prefix.
            );
        }
    
    }
    ?>
    
    然后在indexAction中,您可以按如下方式附加一些JS文件:

    $this->view->headScript()->appendFile($this->view->baseUrl('/js/someJS.js'));
    
    关于Q1(基于评论)。您应该能够以常规方式访问助手。但是,由于它不起作用,我认为引导视图资源的方式和/或执行帮助程序的具体注册的方式或向其添加帮助程序路径的方式存在问题。我粘贴了一个在Bootsrap.php中添加助手路径的示例:

    <?php
    #file: APPLICATION_PATH/Bootstrapt.php
    
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    
        public function _initViewHelperPath() {
    
            $this->bootstrap('view');
            $view = $this->getResource('view');
    
              $view->addHelperPath(
                    APPLICATION_PATH . '/modules/default/views/helpers',
                    'My_View_Helper' // <- this should be your helper class prefix.
            );
        }
    
    }
    ?>
    
    然后在indexAction中,您可以按如下方式附加一些JS文件:

    $this->view->headScript()->appendFile($this->view->baseUrl('/js/someJS.js'));
    

    我宁愿放弃你的JQueryUI.php,而使用ZendX。诸如此类:

    在控制器中:

        ZendX_JQuery::enableView ($this->view);
        $this->view->jQuery ()->enable ()->setRenderMode (ZendX_JQuery::RENDER_ALL);
    
    在布局中:

    <?php echo $this->jQuery () ?>
    

    我宁愿放弃你的JQueryUI.php,而使用ZendX。诸如此类:

    在控制器中:

        ZendX_JQuery::enableView ($this->view);
        $this->view->jQuery ()->enable ()->setRenderMode (ZendX_JQuery::RENDER_ALL);
    
    在布局中:

    <?php echo $this->jQuery () ?>
    

    尽管我讨厌回答自己的问题,但根据马辛在回答中的建议,我又想出了一个解决方案。也可以在application.ini中完成:

    resources.view[] =
    resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/modules/default/views/helpers"
    

    需要注意的是,这些行需要按此顺序显示。如果是相反的,参考资料。视图[]=之前的任何内容都将被忽略。

    尽管我讨厌回答自己的问题,但根据Marcin在回答中的建议,我又想出了一个解决方案。也可以在application.ini中完成:

    resources.view[] =
    resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/modules/default/views/helpers"
    

    需要注意的是,这些行需要按此顺序显示。如果将其颠倒,则将忽略
    参考资料.view[]=
    之前的任何内容。

    关于问题1。您应该能够以常规方式访问助手。但是,由于它不起作用,我认为引导视图资源的方式、执行辅助对象的协调注册的方式或向其添加辅助对象路径的方式存在问题。我粘贴了一个在Bootsrap.php中添加帮助器路径的示例:。这通常适用于ZF的模块化设置。是ZF盒子里的东西还是你自己做的?@akond:是我做的。它只是简单地将
    jquery.js
    jqueryui.js
    ui.css
    添加到页面的标题部分,没有什么特别之处。我只在一个页面上使用它,在这里我需要一些拖拽,并且认为在所有页面上都包含它是没有意义的@马辛:和往常一样,你的洞察力是无价的。你介意把它贴出来作为回答吗?我是根据我的评论来回答的。很高兴我能帮忙。关于问题1。您应该能够以常规方式访问助手。但是,由于它不起作用,我认为引导视图资源的方式、执行辅助对象的协调注册的方式或向其添加辅助对象路径的方式存在问题。我粘贴了一个在Bootsrap.php中添加帮助器路径的示例:。这通常适用于ZF的模块化设置。是ZF盒子里的东西还是你自己做的?@akond:是我做的。它只是简单地将
    jquery.js
    jqueryui.js
    ui.css
    添加到页面的标题部分,没有什么特别之处。我只在一个页面上使用它,在这里我需要一些拖拽,并且认为在所有页面上都包含它是没有意义的@马辛:和往常一样,你的洞察力是无价的。你介意把它贴出来作为回答吗?我是根据我的评论来回答的。很高兴我能帮忙。谢谢你的回答。虽然这是一个很好的观点和可靠的信息(我之前不知道ZendX),但它与我的问题(关于访问视图帮助程序:)并不完全相关。谢谢你的回答。虽然这是一个很好的观点和可靠的信息(我之前不知道ZendX),但它与我的问题(关于访问视图帮助程序:)并不完全相关。