我正在尝试做某事,但我甚至无法想象如何去做。
要将参数传递给middlware我正在这样做:
Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
//
}]);
来自laravel文档。 然后在句柄函数中获取参数...
但是laravel建议在控制器的__construct中声明中间件的使用,并在路径中插入。
因此...
public function __construct() {
$this->middleware('auth');
}
但我不知道如何将参数传递给Controller。
我会感谢任何帮助。
答案 0 :(得分:2)
您可以将url参数访问到中间件,如下所示:
<强> routes.php文件强>
Route::get('/test/{id}', ['uses' => 'Test@test']);
测试控制器
<?php
namespace App\Http\Controllers;
class Test extends Controller
{
/**
* Test constructor.
*/
public function __construct()
{
$this->middleware('test');
}
public function test()
{
return 'sample';
}
测试中间件
<?php namespace App\Http\Middleware;
use Closure;
class Test
{
public function handle($request, Closure $next)
{
dd($request->id);
return $next($request);
}
}
**不要忘记更新你的Kernel.php来激活中间件
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'test' => \App\Http\Middleware\Test::class,
];
答案 1 :(得分:0)
你可以通过相同的方式传递路线。
public function __construct() {
$this->middleware('role:editor');
}
答案 2 :(得分:0)
不要将中间件放在控制器中。尽可能经常地将业务逻辑保留在控制器之外。
而是制作中间件文件。
php artisan make:middleware MyMiddlewareDoesThings
现在在您的文件中,找到$handle
功能。
public function handle($request, Closure $next)
只需在请求和闭包之后添加参数
public function handle($request, Closure $next, $role)
现在$role
将包含role:value
的值,您的示例中的值为$editor
答案 3 :(得分:-2)
如果你想获得控制器的__construct中的参数,你可以这样做:
class HomeController extends \BaseController
{
public function __construct()
{
$this->routeParamters = Route::current()->parameters();
}
}