如何将数组变量(Blade模板)传递到CodeIgniter视图?
问题分析
你当前的遍历失效问题,核心原因是控制器传递数据的方式不对:
在控制器中,你调用$this->blade->view('welcome_message', $data['student']);时,传递的是$data['student']数组的键值对(也就是rollno和name会变成视图里的单独变量$rollno、$name),而不是把student这个数组作为一个整体变量传给视图。所以视图里的$student变量根本不存在,自然无法用@foreach遍历。
解决方案
有两种修正方式,根据你的需求选择:
方式一:传递完整的$data数组
如果你希望保持$data的结构,把整个数组传给视图,修改控制器代码:
class Welcome extends CI_Controller { public function index() { $data['student'] = array('rollno' => '1','name' => 'Joyy'); // 传递整个$data数组,而非$data['student'] $this->blade->view('welcome_message', $data); } }
此时视图里就能正常拿到$student变量,遍历代码可以正常工作(建议加上键名,让遍历结果更清晰):
{{$name}} // 依然可以输出Joyy @foreach($student as $key => $value) <h2>{{ $key }}: {{ $value }}</h2> @endforeach
方式二:直接传递包含student的数组
如果不需要完整的$data结构,也可以直接构造包含student键的数组传递:
class Welcome extends CI_Controller { public function index() { $student = array('rollno' => '1','name' => 'Joyy'); $this->blade->view('welcome_message', ['student' => $student]); } }
视图代码和方式一的视图代码一致即可正常遍历。
补充说明
当你传递数组给Blade视图时,框架会把数组的每个键转换为视图中的独立变量。比如传['name' => 'Joyy'],视图里就有$name;但如果传的是['student' => [...]],视图里就会有$student这个变量,它的值就是你定义的学生数组。
内容的提问来源于stack exchange,提问作者Maulik Pipaliya Joyy
相关产品推荐
相关产品推荐

