我怎样才能在javascript中使用php变量和symfony助手

时间:2013-03-28 13:27:00

标签: symfony-1.4

我有一些带有<script>块的symfony模板文件,显然这需要在头脑中。

这些javascript块可以使用url_for之类的帮助器,也可以回显出symfony模板变量。

我需要能够使用include_javascript或类似的方式加载此javascript但是仍然使用symfony模板函数并访问生成脚本所需的变量的最佳方法是什么,同时将其加载到头部而不是页面正文。

1 个答案:

答案 0 :(得分:2)

在这种情况下,我使用一个特定的Symfony模块,用PHP代码填充JavaScript变量。

为此,您可以创建一个名为“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);
    });