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

Laravel 8控制器向视图传递变量出现$query未定义错误如何解决

Laravel 8 变量传递报错修复方案

错误根因

  • 路由重复定义:相同的GET /userscontrollers路由被定义了两次,Laravel路由匹配规则为从上到下优先匹配后定义的路由,因此访问该路径时永远只会触发Dashboardcheck::userscontroll方法,传递了变量的UsersController::userscontroller_show方法完全不会被执行。
  • 视图传参缺失:Dashboardcheck::userscontroll方法权限校验通过后返回视图时,没有传递模板所需的用户列表$query变量,方法内定义的$query仅用于查询当前登录用户的权限信息,和模板需要的用户列表数据无关。

原报错信息:
$query is undefined Make the variable optional in the blade template. Replace {{ $query }} with {{ $query ?? '' }}

修复步骤

方案一(推荐:合并权限校验+数据查询逻辑,无安全风险)

  1. 清理重复路由,仅保留权限校验相关的路由配置即可:
// 删掉原来的UsersController对应的同路径路由,只保留这一条
Route::get('/userscontrollers', [Dashboardcheck::class, 'userscontroll']);
  1. 修改Dashboardcheck::userscontroll方法,权限校验通过后查询用户列表数据并传递给视图:
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
class Dashboardcheck extends Controller
{
    function login(){
        if(Session::has('user')){
            return view('Pages.dashboard');
        }else{
            return redirect('/');
        }
    }
    function userscontroll(){
        if(Session::has('user')){
            // 重命名当前用户查询变量,避免和用户列表变量冲突
            $currentUser = DB::table('user')
            ->where('nick_user', Session::get('user'))
            ->first();
            if($currentUser->user_permission >= 4){
                // 权限校验通过后,查询模板需要的用户列表数据
                $query = DB::table('user')
                ->select('id_users', 'nick_user', 'email_user', 'verification_user')
                ->get()
                ->toArray();
                // 传递变量到视图
                return view('Pages.Dashboard.usercontroll', compact('query'));
            }else{
                return redirect('/dashboard')->with('alert', 'Nie posiadasz uprawnien do przeglądania tych treści');
            }
        }else{
            return redirect('/');
        }
    }
}
  1. 冗余的UsersController::userscontroller_show方法可直接删除。

方案二(路由拆分,需额外加权限校验)

如果需要保留两个控制器的独立逻辑,可给两个路由分配不同的访问路径,同时给用户列表路由补充权限校验,避免未授权用户直接访问用户数据:

// 权限校验路由
Route::get('/userscontrollers', [Dashboardcheck::class, 'userscontroll']);
// 用户列表查询路由,需额外补充权限校验中间件
Route::get('/userscontrollers/list', [UsersController::class, 'userscontroller_show']);

修改后访问/userscontrollers/list即可正常获取传递的$query变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:39:03