我正在尝试在 ZF2 中执行一个简单的控制器操作,该操作返回一个 javascript 文件。简而言之,我想做的是使用 PHP 可以通过以下方式进行的操作:
<?php header('Content-Type: text/javascript'); ?>
var foo = '<?php echo $bar; ?>';
现在,在 ZF2 中,我有一个 ActionController 的动作函数,如下所示:
public function environmentAction()
{
$headers = new Headers();
$headers->addHeaderLine('Content-Type', 'text/javascript');
$this->getResponse()->setHeaders($headers);
$this->layout()->setTemplate('js/environment');
$view = new ViewModel();
return $view;
}
然后,通过以下方式配置路由:
'environment' => array(
'type' => 'Literal',
'options' => array(
'route' => '/js/environment.js',
'defaults' => array(
'controller' => 'Application\Controller\Index',
'action' => 'environment',
),
),
)
最后,视图是一个 .phtml 文件(在keytemplate_map
下的部分中定义的文件js/environment
),就像在简单的 PHP 案例中一样:
var foo = '<?php echo $bar; ?>'
所以,一切都应该完成。我只是<script>
在 layout.phtml 的 head 部分添加了一个元素:
<script type="text/javascript" src="/js/environment.js"></script>
问题是在我的浏览器控制台中加载页面时出现以下错误:
GET ***/js/environment.js 500 (Internal Server Error)
但是如果我尝试在新页面中打开相同的链接,我会成功获取脚本。
有什么不同?在我浏览器的开发人员工具的网络部分,我看到这个脚本的 http get 请求及其标头与所有其他请求相同,那么为什么它的行为不同呢?为什么我会收到此错误?在我的 php 日志中,没有关于此事件的内容。任何想法?
解决了像这样修改动作函数:
public function environmentAction()
{
$headers = new Headers();
$headers->addHeaderLine('Content-Type', 'text/javascript');
$this->getResponse()->setHeaders($headers);
$view = new ViewModel();
$view->setTemplate('js/environment');
$view->setTerminal(true);
return $view;
}