向Laravel __construct中的控制器添加中间件

问题描述 投票:-1回答:3

我正在尝试基于Laravel docs在控制器的__construct中分配中间件,但会引发以下错误:

BadMethodCallException
Method App\Http\Controllers\MyController::middlware does not exist.

这是我的控制器类:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class MyController extends Controller
{

    public function __construct()
    {
        $this->middlware('myauth');
    }

    /** something */
    public function index()
    {
        return view('test.hi', ['name' => 'Moh']);
    }
}

这是中间件代码:

<?php

namespace App\Http\Middleware;

use Closure;

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

        echo time().'<br>';
        return $next($request);
    }
}

Laravel版本:6.5.2

我在哪里做错了?

php laravel laravel-6 laravel-middleware
3个回答
3
投票

该函数为middleware,您有错字,缺少e


0
投票

可以在控制器的构造函数中指定中间件

public function __construct() {
    $this->middleware('auth');
}

对于整个控制器:

$this->middleware('auth');

仅用于特定操作:

$this->middleware('auth')->only('index');

对于整个控制器,除了特定动作:

$this->middleware('auth')->except('store');

-1
投票

首先问您,您的错误是middlware名称不正确,您检查以下中间件过程后错过了e

Laravel中间件-中间件充当请求和响应之间的中间人。

首先进入项目文件夹并打开cmd并使用此命令

php artisan make:middleware MiddlewareName

此后转到App \ Http \ kernel.php并在$ routeMiddleware上添加一行]

'user_block' => \App\Http\Middleware\MiddlewareName::class

之后转到您的中间件在句柄函数中(编写您自己的中间件代码)

在途中使用您的中间件-

Route::group(['middleware' => ['user_block']],
    function () {
Route::get('/logout', array('uses' => 'Auth\LoginController@logout'));
});

如果您在任何控制器的__construct中的特定控制器中使用了此中间件,只需写一行

namespace App\Http\Controllers;
use App\User;

class UserController extends Controller {

 public function __construct() {

    $this->middleware('user_block');
 }
}

如果您只想在控制器中执行此中间件操作,则可以将此中间件添加到路由中:

Route::get('/login', 'LoginController@login')->middleware('user_block');

如果您在特定的1-2功能中的特定控制器中使用了此中间件,只需将此行写入控制器中的__construct functiono中>]

public function __construct()
{
   $this->middleware('user_block')->only(['login','register']);
}
© www.soinside.com 2019 - 2024. All rights reserved.