Ошибка промежуточного программного обеспечения Laravel (попытка получить свойство 'заголовки' необъектного объекта) - PullRequest
0 голосов
/ 12 февраля 2019

Я получаю ошибку при переносе маршрута ресурса к своему пользовательскому промежуточному ПО

Мое промежуточное ПО :

<?php

 namespace App\Http\Middleware;

 use Closure;
 use Auth;

class Officer
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Auth::check() && Auth::user()->role == 'title_officer') {
            return $next($request);
        }
        // elseif (Auth::check() && Auth::user()->role == 'agent') {
        //     return redirect('/agent');
        // }
        // else {
        //     return redirect('/customer');
        // }
    }
}

Ресурс route с использованием промежуточного программного обеспечения:

Route::resource('new-order', 'BackendController')->middleware('officer');

Я получаю сообщение об ошибке:

(пытаюсь получить свойство 'headers' не-объекта).

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

В промежуточном программном обеспечении важно обрабатывать все случаи и возвращать перенаправления соответственно или прерывать работу.

Вы делаете return $next($request);, когда хотите разрешить системе продолжить обработку запроса вперед.

Однако, если в случае сбоя условия if (Auth::check() && Auth::user()->role == 'title_officer') вы не упомянули, что должна делать система.

Вы можете быть abort(404), если вы не хотите показывать страницу как доступную, или abort(403) для запрещенного доступа.

public function handle($request, Closure $next)
    {
        if (Auth::check() && Auth::user()->role == 'title_officer') {
            return $next($request);
        }
        abort(403);
    }

Но убедитесь, что вы не добавилислучай, который сделает бесконечный цикл.Пожалуйста, проверьте документацию для получения дополнительной информации.

0 голосов
/ 12 февраля 2019

попробуйте добавить блок else, который возвращается, когда ваше if условие не выполнено:

public function handle($request, Closure $next)
    {
        if (Auth::check() && Auth::user()->role == 'title_officer') {
            return $next($request);
        }else{
           return back();
        }
    }
...