从控制器或表单中解析视图助手位置

时间:2011-02-12 13:47:46

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

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

application
    --forms
        --Project
            AddIssue.php
    --modules
        --default
            --views
                --helpers
                    JQueryUI.php
                    Wysiwyg.php
        --project
            --controllers
                ProjectController.php
            --views
                --scripts
                    --project
                        version.phtml
                        issueadd.phtml

我想做什么:

  1. 在视图project/project/issueadd
  2. 中包含CKEditor
  3. project/project/version
  4. 中包含jQuery UI

    当我在视图脚本中时,调用<?php $this->jQueryUI(); ?>就像魅力一样,即使帮助程序位于默认模块的帮助程序目录中。但是,控制器和表格也是如此。

    在控制器ProjectController.phpversionAction()中,我试图致电:

    $this->view->jQueryUI();
    

    并且效果异常:

      

    消息:在注册表中找不到名称'JQueryUI'的插件;使用的路径:Project_View_Helper_:C:/ xampp / htdocs / bugraid / application / modules / project / views \ helpers / Zend_View_Helper_:Zend / View / Helper /

    同样,在AddIssue.php表单中,我尝试了这个:

    $this->getView()->wysiwyg();
    

    又有一个例外:

      

    消息:在注册表中找不到名称'Wysiwyg'的插件;使用的路径:Project_View_Helper_:C:/ xampp / htdocs / bugraid / application / modules / project / views \ helpers / Zend_View_Helper_:Zend / View / Helper /

    显然,如果我的视图帮助程序位于调用它们的模块/控制器的帮助程序目录中,两者都可以工作,但由于它们用于多个模块,我希望将它们放在默认模块中查看助手目录。

    所以,我的问题是:

    1. 如何从控制器和表单中访问这些视图助手?
    2. 有没有更简单的方法来解决这个问题(除了简单地包含布局中的所有javascript文件)?就像创建插件或动作助手一样? (我之前没有做过这些事情,所以我真的不知道,我只是在ZF开始冒险)。

3 个答案:

答案 0 :(得分:3)

关于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.
        );
    }

}
?>

此课程通常适用于ZF的模块化设置。

关于Q2: 您可以使用headScript查看帮助程序来管理您在布局的head标记中加载的脚本。使用此帮助程序,您可以通过操作完成此操作。

例如。如果在layout.php中你有:

<head>
    <?php echo $this->headScript(); ?>
</head>

然后进入,例如indexAction你可以按如下方式附加一些JS文件:

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

答案 1 :(得分:3)

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

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

需要注意的是,线条需要按此顺序出现。如果它被颠倒,resources.view[] =之前的任何内容都将被忽略。

答案 2 :(得分:0)

我宁愿摆脱你的JQueryUI.php并使用ZendX。这样的事情:

在控制器中:

    ZendX_JQuery::enableView ($this->view);
    $this->view->jQuery ()->enable ()->setRenderMode (ZendX_JQuery::RENDER_ALL);

布局:

<?php echo $this->jQuery () ?>
相关问题