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

Laravel:如何通过Session获取登录用户帖子并修复变量未定义错误

问题解决步骤

1. 修复路由拼写错误

你的路由地址写了/dashaboard(多了一个字母a),这会导致访问/dashboard时无法触发对应的控制器方法,视图自然接收不到$posts变量。修改web.php:

use App\Http\Controllers\PostController;

Route::get('/dashboard',[PostController::class,'post']);

2. 执行数据库查询

控制器里的Post::where(...)只是创建了查询构造器,并没有实际执行查询获取数据,必须添加->get()来获取结果集合:

public function post(Request $request){
     // 用Laravel Auth系统获取用户ID,替代Session::get('id')更安全规范
     $userId = auth()->id();
     $posts = Post::where('post_id', $userId)->get();
     return view('dashboard',['posts' => $posts]);
}

3. 规范用户ID获取方式(推荐)

直接调用Session::get('id')不够严谨,Laravel自带的Auth系统能确保用户已登录且ID合法。如果使用Auth门面,需要先引入:

use Illuminate\Support\Facades\Auth;

// 获取当前登录用户ID
$userId = Auth::id();

4. 添加登录验证中间件(可选)

为防止未登录用户访问dashboard页面,在PostController中添加auth中间件:

class PostController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    // ... 其他方法
}

5. 视图容错处理(可选)

在视图中增加判断,避免因变量未定义引发额外错误:

@isset($posts)
    @foreach ($posts as $post)
        <tr>
            <td>{{$post->post_title}}</td>
            <td>{{$post->post_description}}</td>
        </tr>
    @endforeach
@endisset

内容的提问来源于stack exchange,提问作者Kumi Kwasi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:01:19