我正在将一个大型项目从 Codeigniter 3 转换为 Codeigniter 4。我遇到了 CI3 中没有发生但现在 CI4 中发生的奇怪行为。 我有一个具有以下功能的控制器:
public function info($projectid=-1,$datasetid=-1,$doImportCk=1){
$data['doImportCk'] = $doImportCk;
$this->common->render_page($basics,'manage/dataset/info',$data);
}
渲染页面只是回显这样的视图:
public function render_page($basics,$viewname,$data=array()){
echo view('template/top',$basics);
echo view('template/header');
echo view('template/leftnav');
if(is_array($viewname)){
foreach ($viewname as $view){
echo view($view,$data);
}
}
else{
echo view($viewname,$data);
}
echo view('template/footer');
}
现在,当视图呈现时,我在控制台中收到一个错误,显示 $doImportCk 为空。视图中的代码如下所示:
var doImportCk=<?php echo $doImportCk;?>;
如何让该值显示为 0 而不是 null/空白? 它曾经在 CI3 中工作...
在 CodeIgniter 4 中,数据传递到视图的方式与 CodeIgniter 3 类似,但 PHP 处理变量的方式与 CodeIgniter 4 处理变量的方式存在一些差异。如果您遇到值为 0 的变量被呈现为空白的问题,可能是由于 PHP 在视图中直接回显该值时解释该值的方式所致。
为了确保值在视图中正确呈现,您可以使用 PHP 的 json_encode() 函数,该函数将正确处理值到 JavaScript 友好格式的转换。这对于数值(包括 0)特别有用。
以下是修改视图以确保正确输出值的方法:
<script>
var doImportCk = <?php echo json_encode($doImportCk); ?>;
</script>
通过使用 json_encode(),您可以确保该值正确转换为 JavaScript 文字,这将正确处理 0。
此外,请确保 $doImportCk 变量从控制器正确传递到视图。如果问题仍然存在,您可能需要检查 CodeIgniter 4 设置中是否存在任何可能会在数据到达视图之前更改数据的修改或中间件。