我正在尝试基于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
我在哪里做错了?
该函数为middleware
,您有错字,缺少e
。
可以在控制器的构造函数中指定中间件
public function __construct() {
$this->middleware('auth');
}
对于整个控制器:
$this->middleware('auth');
仅用于特定操作:
$this->middleware('auth')->only('index');
对于整个控制器,除了特定动作:
$this->middleware('auth')->except('store');
首先问您,您的错误是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']); }