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

时间:2012-02-23 01:11:06

标签: php javascript codeigniter

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

3 个答案:

答案 0 :(得分:4)

是的,请回复javascript:<?php echo '<script>var myPhpVariable = "'. $my_var . '";</script>'; ?>

答案 1 :(得分:1)

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

例如 - 在控制器中

$data['newvar'] = $myvar_in_the_controller;

然后在javascript的视图中

<?php echo $newvar ?>

答案 2 :(得分:0)

我一直在开发一个页面,该页面需要将大量php数据移植到客户端。

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

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

  • 它们使将来的脚本开发人员难以快速理解
  • 他们无法使用数组函数

在后续技术中,我将展示如何以DRY方式提供各个javascript声明。在这种情况下,我可以容忍使用变量变量,因为可以清楚地知道要处理的变量名称,并且不使用任何数组函数。出于记录,我从未认可使用extract(),也从未有充分的理由在我的任何项目中使用它。 (我仅使用extract()来模拟CI行为。)

PHP:(Demo

// 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_encode ed对象,然后仅从该结构中访问值。但是,这些年来,我采用了一个非常繁重的项目,该项目已经由许多不同的开发人员处理。除了重构模板模板并冒着破坏某些东西的风险,我将以上内容用作临时的改进,直到提供正确的重写脚本为止。