Laravel如何将参数传递给控制器​​中间件

时间:2016-06-23 19:29:13

标签: php laravel

我正在尝试做某事,但我甚至无法想象如何去做。

要将参数传递给middlware我正在这样做:

Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
    //
}]);  

来自laravel文档。 然后在句柄函数中获取参数...

但是laravel建议在控制器的__construct中声明中间件的使用,并在路径中插入。

因此...

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

但我不知道如何将参数传递给Controller。

我会感谢任何帮助。

4 个答案:

答案 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();
    }
}