MiddleWare 上的 Laravel 返回视图

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/50408698/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 17:43:18  来源:igfitidea点击:

Laravel return view on middleWare

phplaravellaravel-5.6

提问by DolDurma

in laravel i'm trying to check user activecolumn and if its 0then must be show simple view as your account is disable, after implementing below codes i get this error:

在laravel中,我正在尝试检查用户active列,如果它0必须显示简单视图为your account is disable,在实现以下代码后,我收到此错误:

Call to a member function setCookie() on null

在 null 上调用成员函数 setCookie()

my middleware:

我的中间件:

class CheckUserActive
{
    public function handle($request, Closure $next)
    {
        if (auth()->check()) {
            if (auth()->user()->active == 0) {
                auth()->logout();
                $message = 'your account is disable';
                return view('layouts.frontend.pages.user-messages', compact('message'));
            }
        }
        return $next($request);
    }
}

kernel.php:

kernel.php

...
    protected $middlewareGroups = [
        'web' => [
            ...
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\CheckUserActive::class,

        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];
...

user-messages.blade.php:

user-messages.blade.php

@extends('layouts.frontend.main')

@section('content')
    <div class="content-wrapper">
        <div class="container">
            <div class="row">
                <div class="col-md-8 col-md-offset-2">
                    <div class="panel panel-default">
                        <div class="panel-body">
                            <p style="text-align: center;">
                                {!! $message !!}
                            </p>
                        </div>
                    </div>
                </div>
            </div>
        </div>

    </div>
@endsection

采纳答案by Saurabh

You shouldn't use middleware to return a view, rather use it to redirect to a route and then return a view from your controller.

您不应该使用中间件来返回视图,而应该使用它来重定向到路由,然后从控制器返回视图。

In your middleware:

在您的中间件中:

use Auth;

class CheckUserActive
{
    public function handle($request, Closure $next)
    {
        if (Auth::check()) {
            if (Auth::User()->active == 0) {
                Auth::logout();
                retrun redirect()->route('redirect-route');
            }
        }
        return $next($request);
    }
}

Create a new route:

创建新路由:

Route::get('/', [
        'as' => 'redirect-route',
        'uses' => 'PageController@redirectFunction',
    ]);

Now create a function in your controller:

现在在你的控制器中创建一个函数:

public function redirectFunction() 
{ 
    $message = 'your account is disable';
    return view('layouts.frontend.pages.user-messages', compact('message'));
}

回答by adam

based on the documentation, you can access view using response()->view('custom');

根据文档,您可以使用访问视图 response()->view('custom');

回答by Ajay

This one work for return view from middleware

这一项用于从中间件返回视图

return new response(view('view.path'));

回答by Alessandro.Vegna

Have you tried to remove:

您是否尝试删除:

$response->header->setCookie(...);

and modify with:

并修改为:

$response->withCookie(..your cookie here...);

Have a look to this post

看看这个帖子

回答by AddWeb Solution Pvt Ltd

You should try this:

你应该试试这个:

use Auth;

class CheckUserActive
{
    public function handle($request, Closure $next)
    {
        if (Auth::check()) {
            if (Auth::user()->active == 0) {
                Auth::logout();
                $message = 'your account is disable';
                return view('layouts.frontend.pages.user-messages', compact('message'));
            }
        }
        return $next($request);
    }
}