0

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;
}
4

1 に答える 1

0

これは本当に悪いやり方です。

<script type="text/javascript" src="/js/environment.js"></script>

これにより、ブラウザはファイル '/js/environment.js' に対して新しいリクエストを作成し、これが再びルートに一致します。

'route'    => '/js/environment.js'

競合状態/無限ループが発生します。

Web サーバーのセットアップに応じて、「/js/environment.js」を要求し、ファイルが実際に存在する場合 (つまり、environment.js を含む js と呼ばれる物理ディレクトリ)、ファイルはルートに行くのではなく返されます。とにかく、これは別の望ましくない効果です。

于 2013-02-15T10:44:40.250 に答える