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
相关产品推荐
相关产品推荐

