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',
),
),
)
最終的に、ビューは単純な PHP の場合のように .phtml ファイル (キーtemplate_map
の下のセクションで定義されているファイル) です。js/environment
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;
}