1

いくつかのチャンクを含む symfony テンプレート ファイルがありますが<script>、明らかにこれは頭にある必要があります。

これらの javascript のチャンクは、url_forsymfony テンプレート変数のようなヘルパーを利用し、エコーアウトします。

または同様のものを使用してこのJavaScriptをロードできる必要がありますがinclude_javascript、symfonyテンプレート関数を引き続き使用し、ページの本文ではなくヘッドにロードしながらスクリプトを生成するために必要な変数にアクセスする最良の方法は何ですか.

4

1 に答える 1

2

この場合、JavaScript 変数を PHP コードで埋める特定の Symfony モジュールを使用します。

これを行うには、たとえば「javascript」と呼ばれるモジュールを作成します。このモジュールには単一のアクションが含まれます。このアクションに関連付けられたテンプレートには、次の名前が必要です: ...Success.js.php。

このテンプレートでは、次のように JavaScript 変数を入力できます。

    var global = {
        misc: {
            userCulture : "<?php echo $sf_user->getCulture() ?>",
            serverName : "<?php echo $_SERVER["SERVER_NAME"]?>",
        },
    ...
    }

次に、*appName*Configuration.class.php (アプリの config フォルダーにあります) に、次のコードを追加する必要があります。

    class indexConfiguration extends sfApplicationConfiguration
    {
        public function configure()
        {
          $this->dispatcher->connect('context.load_factories', array($this, 'listenToContextLoadFactoriesEvent'));
        }

        public function listenToContextLoadFactoriesEvent(sfEvent $event)
        {
                $event->getSubject()->getResponse()->addJavascript($event->getSubject()->getRouting()->generate('javascript_variables'));
        }
    }

次に、次のルートを routing.yml ファイルに追加する必要があります。

    javascript_variables:
      url:    /*moduleName*/*actionName*.:sf_format
      param:  { module: *moduleName*, action: *actionName*, sf_format: js }

これで、任意の js ファイルでこれらの JavaScript 変数にアクセスできるようになりました。つまり、次のようになります。

    $(document).ready(function() {
            alert(global.misc.userCulture);
    });
于 2013-03-28T14:53:55.683 に答える