Оператор My If не работает в промежуточном программном обеспечении - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь создать промежуточное ПО, которое может фильтровать мой HTTP-запрос, проверяя, существует ли "$ created_by" , который я передаю через запрос, уже в моих "пользователях" table
Если это так, я хочу продолжить с моим "$ next ($ request)"
И если это не так, я хочу перенаправить его.

Когда ситуация такая: -

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

Он перенаправляет на $ next ($ request); , что правильно
Но когда "$ request-> created_by « отсутствует в DB , что делает $ 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);

        }
    }

Ответы [ 3 ]

2 голосов
/ 28 мая 2020

вы можете использовать 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');

}

1 голос
/ 28 мая 2020

Вы должны убедиться, что $ ip не имеет значения null, прежде чем пытаться получить доступ к свойству uuid.

public function handle($request, Closure $next) {
    $ip = DB::table('users')->where('uuid', '=', $request->created_by)->first();
    if(is_null($ip) || $ip->uuid !== $request->created_by) {
        return redirect('https://www.google.com');
    }

    return $next($request);
}
1 голос
/ 28 мая 2020

Изменить:

Вы уже сделали сравнение в БД, обновите handle() до:

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

       if (is_object($ip) {

         return $next($request);

       }

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