我有一些带有<script>
块的 symfony 模板文件,显然这需要放在头脑中。
这些 javascript 块使用了诸如url_for
symfony 模板变量之类的辅助函数。
我需要能够使用include_javascript
或类似方法加载此 javascript,但什么是仍然使用 symfony 模板函数并访问生成脚本所需的变量的最佳方法,同时将其加载到头部而不是页面的正文中。
我有一些带有<script>
块的 symfony 模板文件,显然这需要放在头脑中。
这些 javascript 块使用了诸如url_for
symfony 模板变量之类的辅助函数。
我需要能够使用include_javascript
或类似方法加载此 javascript,但什么是仍然使用 symfony 模板函数并访问生成脚本所需的变量的最佳方法,同时将其加载到头部而不是页面的正文中。
在这种情况下,我使用了一个特殊的 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);
});