如何将外部JavaScript文件添加到Zend Framework 2应用程序?

13

我需要在我的Zend Framework项目中添加jQuery和其他JavaScript文件。我尝试使用Action controller来完成:

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();
}

但它没有起作用。


“not working”是什么意思?您在布局或视图中是否使用了$this->headScript()进行回显?此外,您的操作中有一个返回语句似乎不正确,尽管我不熟悉ZF2,所以它可能是有效的。 - vascowhite
@vascowhite: 我在控制器中使用了 $this->headScript() - Mangala Edirisinghe
1
你不应该在控制器中输出任何内容,这会破坏MVC的结构。你应该在视图或布局中完成这个任务。 - vascowhite
7个回答

10

以下是如何在ZF2控制器内使用视图助手来解决问题:

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

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

在控制器中举例说明会更好。从视图里添加脚本和样式感觉有点不规范,但似乎许多ZF2的例子都这么做。那么什么方式被认为是“正确”的方式来添加脚本/样式呢? - dKen

9
 $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');
}

2
你可以尝试这个。对我来说很有效。
//将这些行写在您的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);
}

1
以上所有内容都给我带来了大量的错误,而$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(); ?>

1
一个好的方法是在您的控制器操作中使用以下代码,假设您想要包含paginator.js。
$this->view->headScript()->appendFile($this->view->baseUrl().'/js/paginator.js');

1

你没有使用视图来添加jQuery:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接