我知道这将是迟到的答案,并且我使用了@chelmertz 解决方案,但目前我遇到了一些问题。我在一个复杂的 UI 应用程序中工作,我的外部 javascript 文件中需要大量 php 数组和其他 json 对象。并且包含我的 js 脚本并不统一,所以每次如果我需要从 php 到 javascript 的一些东西,我必须检查整个东西,比如 ....
1) 我是否将 appendScript() 放置在正确的位置,以便 some.js 脚本会找到我定义的变量
2) 将传递给 appendScript() 的生成字符串是有效的 js 语法。
还有更多...
我专门为 Zend Framework 开发了另一种方法。
我在这里写了一个详细的教程
http://rupeshpatel.wordpress.com/2012/09/21/add-json-objects-arrays-and-variables-from-php-to-javascript/
总结:
1) 创建一个包含在标签中的通用视图文件,它检查一个属性(一个数组),比如说视图对象的 $this->jsVars 并定义 js 变量
这个视图文件的代码
<script>
<?php if(!empty($this->jsVars)){ ?>
<?php
foreach($this->jsVars as $var) {
if($var['type'] == 'json'){
?>
var <?php echo $var['name']?> = JSON.parse('<?php echo $var['value'];?>');
<?php } elseif($var['type'] == 'text'){ ?>
var <?php echo $var['name']?> = "<?php echo $var['value'];?>";
<?php }else{?>
var <?php echo $var['name']?> = <?php echo $var['value'];?>;
<?php
}}?>
<?php }?>
</script>
2) 在 echo $this->headScript() 之前的布局文件中呈现此视图,以便所有外部脚本都具有这些 js 变量
<?php
echo $this->render('index/include_js_vars.phtml'); // rendering view
$this->headScript()->prependFile(JS_BASE_URL.'/jquery-1.7.2.min.js');
$this->headScript()->appendFile(JS_BASE_URL.'/jquery.blockUI.js');
$this->headScript()->appendFile(JS_BASE_URL.'/commonJS.js');
$this->headScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js');
echo $this->headScript();
?>
3) 将 php 数组或 json 对象附加到 $this->view->jsVars like
//在你的动作方法中
$test = array('mango','orange','banana');
$this->view->jsVars[] = array('name'=>'test','type'=>'json','value'=>json_encode($test));
现在test 将在您的任何脚本文件中定义为一个数组,无论您在什么情况下包含您的 js 文件。