CodeIgniter控制器可读取Session但视图无法获取变量如何解决
问题根因
CodeIgniter 框架的view()方法接收第二个参数为关联数组时,会自动将数组的键名解析为独立的视图变量,不会把整个数组作为一个变量传递到视图层。
你现在给view()传的$userDetails数组的键是name和email,所以视图里能直接用$name、$email两个变量,而不存在$userDetails这个变量,这就是视图拿不到值的核心原因。
修正方案
方案1:修改视图代码(无需调整控制器逻辑)
直接用解析好的独立变量输出即可,视图profile.php修改为:
<h3>Welcome to the Profile Section : <?php echo $name; ?></h3> <p>Your email id : <?php echo $email ; ?></p>
方案2:修改控制器传参逻辑(保留视图原有写法)
把$userDetails作为二维数组的元素传递,键名对应你要在视图里用的变量名,控制器代码修改为:
class ProfileController extends Controller{ public function index() { $session = session(); $userDetails = ['name' => $session->get('name'), 'email' => $session->get('email')]; print_r($userDetails); // 把userDetails作为键包裹一层再传 echo view('profile', ['userDetails' => $userDetails]); }
这种改法下原来的视图代码不需要调整,就能正常读取$userDetails['name']和$userDetails['email']的值。
可选优化:补充 session 校验
建议在方法开头加存在性判断,避免未登录用户访问时出现变量未定义报错:
$session = session(); if(!$session->has('name') || !$session->has('email')){ // 跳转到登录页逻辑 return redirect()->to('/login'); }
内容的提问来源于stack exchange,提问作者Bunty Sharma
相关产品推荐
相关产品推荐

