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

Laravel控制器全局规则实现:让Admin验证逻辑覆盖所有方法

Laravel控制器统一规则实现方案(以AdminController为例)

一、用中间件统一处理Admin登录验证

  1. 创建自定义中间件:
    执行命令:php artisan make:middleware AdminAuth
  2. 打开app/Http/Middleware/AdminAuth.php,写入验证逻辑:
    public function handle(Request $request, Closure $next)
    {
        // 检查Admin会话是否存在,不存在则跳转登录页
        if (!session('Admin')) {
            return redirect('adminpanel/login');
        }
    
        return $next($request);
    }
    
  3. 在app/Http/Kernel.php的$routeMiddleware数组中注册中间件:
    'admin.auth' => \App\Http\Middleware\AdminAuth::class,
    
  4. 在AdminController的构造方法中全局应用该中间件,所有方法自动生效:
    class AdminController extends Controller
    {
        public function __construct()
        {
            $this->middleware('admin.auth');
        }
    
        // 其他业务方法...
    }
    

二、统一共享公共数据到所有视图

解决accinfo和charinfo重复查询的问题,有两种实现方式:

方式1:控制器构造方法内共享

直接在AdminController的构造方法中添加视图共享代码,该控制器下所有视图均可直接使用共享数据:

class AdminController extends Controller
{
    public function __construct()
    {
        $this->middleware('admin.auth');

        // 一次性查询并共享统计数据
        view()->share([
            'accinfo' => DB::Table('MEMB_INFO')->count(),
            'charinfo' => DB::Table('Character')->count(),
        ]);
    }

    // 示例方法:直接返回视图,无需重复传参
    public function home()
    {
        return view('ap.home');
    }
}

方式2:中间件内共享数据

如果其他控制器也需要这两个统计数据,可将共享逻辑整合到AdminAuth中间件中:

public function handle(Request $request, Closure $next)
{
    if (!session('Admin')) {
        return redirect('adminpanel/login');
    }

    // 共享数据给所有经过该中间件的视图
    view()->share([
        'accinfo' => DB::Table('MEMB_INFO')->count(),
        'charinfo' => DB::Table('Character')->count(),
    ]);

    return $next($request);
}

三、整合后的完整AdminController示例

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\View;

class AdminController extends Controller
{
    public function __construct()
    {
        // 全局应用登录验证中间件
        $this->middleware('admin.auth');

        // 共享公共统计数据
        View::share([
            'accinfo' => DB::table('MEMB_INFO')->count(),
            'charinfo' => DB::table('Character')->count(),
        ]);
    }

    // 后台首页
    public function home()
    {
        return view('ap.home');
    }

    // 示例业务方法:用户列表
    public function userList()
    {
        $users = DB::table('MEMB_INFO')->get();
        return view('ap.user-list', ['users' => $users]);
        // 视图中可直接使用$accinfo和$charinfo变量
    }
}

此后新增任何方法,都无需重复编写登录验证和数据查询代码,只需专注业务逻辑即可。

内容的提问来源于stack exchange,提问作者Виктор Минчев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:31:08