繁体   English   中英

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

[英]passing php variable from controller to javascript function in the head of a view

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

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

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

例如-在控制器中

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM