将 php 变量从控制器传递给视图头部的 javascript 函数

IT技术 php javascript codeigniter
2021-03-09 03:17:57

我会将两个 php 变量从 codeigniter 控制器传递给位于我的视图头部的 javascript 函数。有可能做这样的事情吗?

3个回答

是的,当然,只需回显 javascript: <?php echo '<script>var myPhpVariable = "'. $my_var . '";</script>'; ?>

如果我需要传递整个数组,或者让我们扩展它,一个多维数组怎么办……那么这种方法会起作用吗?
2021-04-20 03:17:57
请记住,JS 是从 HTML 文档中的服务器端执行的,PHP 在所有这些之前进行处理,因此您始终可以打印出您需要即时完成的任何 JS,如本答案所示
2021-04-27 03:17:57
哈哈是的,我不知道我为什么写服务器端!
2021-05-13 03:17:57

或者只是在你的控制器中设置你的变量

例如 - 在控制器中

$data['newvar'] = $myvar_in_the_controller;

然后在javascript的视图中

<?php echo $newvar ?>

我一直在开发一个页面,需要将相当多的 php 数据移植到客户端。

我更喜欢编写 DRY 代码,并寻求一种更好的方式来编写脚本,而不是一行一行的 javascript 声明。

不幸的是,我不得不打破我的高级编码原则之一:永远不要使用可变变量”。我不认可可变变量的原因是:

  • 他们更难让未来的脚本开发人员快速理解
  • 他们无法享受数组函数

在接下来的技术中,我将展示如何以 DRY 方式提供单独的 javascript 声明。在这种情况下,我容忍使用可变变量,因为很清楚正在处理哪些变量名称并且不使用数组函数。郑重声明,我从不赞同在extract()我的任何项目中使用它,也从来没有充分的理由使用它。(我只是extract()用来模拟 CI 行为。)

PHP:(演示

// declared in controller...
$data = [
    'a' => -1.5,
    'b' => false,
    'c' => null,
    'd' => 'stringy "string" thing',
    'e' => range(3,10),
    'f' => "0",
    'g' => (object)['food' => 'bard'],
    'h' => "not used",
];

// the CodeIgniter effect...
extract($data);

// in your view...
$portToJS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];

echo "\n<script>\nlet ";
foreach ($portToJS as $i => $variable) {
    echo (!$i ? '' : ",\n\t") , "{$variable} = " , json_encode(${$variable});
}
echo ";\n</script>";

输出:

<script>
let a = -1.5,
    b = false,
    c = null,
    d = "stringy \"string\" thing",
    e = [3,4,5,6,7,8,9,10],
    f = "0",
    g = {"food":"bard"};
</script>

json_encode()您的变量值来说这是一个好主意,这样您就不必费心引用或转义引号。

理想情况下,我更愿意传递单个json_encodeed 对象,然后只访问该结构中的值。但是,我采用了一个非常繁重的项目,多年来,该项目已由许多不同的开发人员处理。与其重构一堆模板并冒着破坏某些东西的风险,我将上述内容用作临时改进,直到提供适当的重新编写脚本。