You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 15:48:03