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

I'm trying to do something but i cant even imagine how to do it.

To pass parameters to a middlware I'm doing this:

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

From the laravel documentation. Then get the parameter in the handle function...

But laravel suggest to declare the middleware use in the __construct in the Controller, insted in the route.

So...

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

But i dont know how to pass parameters to the Controller.

I would thank any help.

If you want to get the parameters in the __construct of your controller you could do this:

class HomeController extends \BaseController
{
    public function __construct()
    {
        $this->routeParamters = Route::current()->parameters();
    }
}

You can pass the same way, you are passing on the route.

public function __construct() {
    $this->middleware('role:editor');
}

Don't put the middleware in the controller. Keep business logic out of the controller as often as possible.

Instead, make your middleware file.

php artisan make:middleware MyMiddlewareDoesThings

Now inside of your file, locate the $handle function.

public function handle($request, Closure $next)

Just add arguments after the request and closure

public function handle($request, Closure $next, $role)

Now $role will contain the value of role:value which from your example would be $editor

You can access url parameters into middleware shown as below:

routes.php

Route::get('/test/{id}', ['uses' => 'Test@test']);

Test Controller

<?php
namespace App\Http\Controllers;

class Test extends Controller
{

    /**
     * Test constructor.
     */
    public function __construct()
    {
        $this->middleware('test');
    }

    public function test()
    {
        return 'sample';
    }

Test Middleware

<?php namespace App\Http\Middleware;

use Closure;

class Test
{
    public function handle($request, Closure $next)
    {
        dd($request->id);

        return $next($request);
    }
}

** dont forget update your Kernel.php to activate middleware

    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,
    ];