【问题标题】:How to add an external javascript file to a Zend Framework 2 application?如何将外部 javascript 文件添加到 Zend Framework 2 应用程序?
【发布时间】:2012-05-07 23:37:43
【问题描述】:

我需要将 jQuery 和其他 javascript 文件添加到我的 Zend Framework 项目中。我正在尝试使用 Action 控制器来做到这一点:-

public function userinfoAction()
{   
    $this->view->headScript()->appendFile($basePath .'/js/validate_jquary.js');
    $this->headScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'); 
    return new ViewModel();
}

但它不起作用。

【问题讨论】:

  • “不工作”是什么意思?您是否在布局或视图中回显$this->headScript()?此外,虽然我不熟悉 ZF2,但在我看来,您的操作中有一个 return 语句这一事实并不正确,因此它可能是有效的。
  • @vascowhite:我是控制器中的ecoho $this->headScript()
  • 你不应该在控制器中回显任何东西,这会破坏 MVC。您应该在视图或布局中执行此操作。

标签: javascript jquery zend-framework zend-framework2


【解决方案1】:

在 ZF2 中,在控制器内可以使用视图帮助器来解决您的问题:

public function someAction()
{                 
     $this->getViewHelper('HeadScript')->appendFile($basePath . '/js/somejs.js');    
}

protected function getViewHelper($helperName)
{
    return $this->getServiceLocator()->get('viewhelpermanager')->get($helperName);
}

【讨论】:

  • +1 用于从控制器中给出示例。从视图中添加脚本和样式感觉很脏,但似乎 ZF2 的许多示例表明这是可以的。哪一种被认为是添加脚本/样式的“正确”方式?
【解决方案2】:
 $this->HeadScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js','text/javascript');
 $this->HeadScript()->appendFile('http://localhost/zend/public/js/validate_jquary.js','text/javascript');

视图中的这段代码没问题。但我不知道这种方法是否正确。

【讨论】:

    【解决方案3】:

    在 ZF2 的控制器中使用视图助手的最简单方法可能是通过渲染器对象:

    public function someAction()
    {                 
         $renderer = $this->serviceLocator->get('Zend\View\Renderer\RendererInterface');
         $renderer->headScript()->appendFile($renderer->baseUrl() . '/js/somejs.js');
    }
    

    【讨论】:

      【解决方案4】:

      你可以试试这个。它对我来说很好用

      //在你的 SampleController 中写下这些行

      public function someAction()
      {
      
      $this->getViewHelper('HeadScript')->appendFile('/js/yourjsfile.js');
      $this->getViewHelper('HeadScript')->appendFile('/js/jquery/jquery.min.js');
      }
      

      // 在控制器中编写如下方法

      protected function getViewHelper($helperName)
      {
      
          return $this->getServiceLocator()->get('viewhelpermanager')->get($helperName);
      }
      

      【讨论】:

        【解决方案5】:

        您没有使用视图添加 jquery:

         $this->view->headScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
        

        【讨论】:

          【解决方案6】:

          一个好的方法是在你的控制器动作中使用下面的代码 假设你想包含 paginator.js

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

          【讨论】:

            【解决方案7】:

            以上所有内容都给我带来了很多错误,而 $this->view->headScript() 完全是关于 Zend Framework 1。这对我有用:

            在控制器的类定义之前添加:

            use Zend\View\Helper\HeadScript;
            

            然后你可以在你的控制器中使用这样的东西(确保你可以在任何操作中使用它,而不仅仅是在构造函数中):

            /**
             * @var Zend\View\Helper\HeadScript
             */
            protected $headScript;
            
            function __construct() {
                $this->headScript = new HeadScript();
                $this->headScript->appendFile('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js','text/javascript');
            }
            

            然后你应该将它添加到你的布局中:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-05-07
              • 1970-01-01
              • 1970-01-01
              • 2013-03-16
              • 2013-12-29
              • 1970-01-01
              • 2013-11-27
              相关资源
              最近更新 更多