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

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

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

<?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::resource('new-order', 'BackendController')->middleware('officer');

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

(Trying to get property 'headers' of non-object).

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

почти @TravisBritz

MorshedSaif 12.02.2019 06:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
15
1
34 516
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

отсутствующий блок else создавал проблему, но теперь я ее исправил. Спасибо

MorshedSaif 12.02.2019 08:25
Ответ принят как подходящий

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

Вы выполняете 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);
    }

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

просто используйте что-то вроде этого в промежуточном программном обеспечении: RedirectIfAuthenticated

public function handle($request, Closure $next, $guard = null)
{
     if (Auth::guard($guard)->check()) {
         // your condition
         return redirect('the route name');
     }
}

Здорово! Мне не хватало помощника перенаправления.

JCarlosR 23.12.2020 07:10

Поздно, но .. Это происходит со мной, когда столбец в БД был нулевым.

Я также столкнулся с той же проблемой, когда создавал страницу панели администратора, но моя проблема была решена после того, как я добавил строку return $next($request); после условия «если-иначе»,

Вот мой код:

public function handle(Request $request, Closure $next)
    {
        if ($request->session()->has('ADMIN_LOGIN')){
        #
        }else{
            $request->session()->flash('error', 'Access Denied');
            return redirect('admin');
        }
        return $next($request);
    }

Другие вопросы по теме