首页 > 解决方案 > 我的 If 语句在中间件中不起作用

问题描述

我正在尝试制作一个中间件,它可以通过检查我通过请求传递的“$created_by”是否存在于我的“用户”表中来过滤我的 http 请求
如果它确实存在,我想继续我的“$next($请求)”
,如果不是,我想重定向它。

当情况是这样的:-

if ($ip->uuid == $request->created_by)

它重定向到$next($request); 这是正确
的但是当数据库中不存在“$request->created_by”时,它会使 $ip 为 null 并且显示此错误“尝试获取非对象的属性 'uuid'”

这是我的中间件:-

<?php

namespace App\Http\Middleware;

use Closure;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;


class Posts
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)

     {
      $ip = DB::table('users')->where('uuid', '=', $request->created_by)->first();
        // dd($ip);
       if ($ip->uuid == $request->created_by) {
        if ($ip == null) {
             return redirect('https://www.google.com');
        }


       }

        return $next($request);

        }
    }

标签: phplaravelif-statementmiddleware

解决方案


如果您的对象为空,您可以使用 optional 来防止错误。

public function handle($request, Closure $next) {
    $ip = DB::table('users')->where('uuid', '=', $request->created_by)->first();
    if(optional($ip)->uuid == $request->created_by) {
        return $next($request);
    }

    return redirect('https://www.google.com');

}


推荐阅读