Как передать параметры middleware в laravel из контроллера?

Пользователь

от terrence , в категории: PHP , год назад

Как передать параметры middleware в laravel из контроллера?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от amber_moore , год назад

@terrence 

В Laravel вы можете передавать параметры middleware из контроллера, используя метод middleware() внутри метода контроллера, который вы хотите защитить middleware. Этот метод позволяет вам добавлять middleware к маршруту, который соответствует данному методу контроллера.


Вот пример, как передать параметры middleware в Laravel из контроллера:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

class MyController extends Controller
{
    public function myMethod(Request $request)
    {
        $middlewareParams = ['param1' => 'value1', 'param2' => 'value2'];

        $this->middleware('myMiddleware:' . json_encode($middlewareParams));

        // Далее идет ваш код метода контроллера
    }
}


В этом примере мы передаем параметры middleware в виде массива $middlewareParams. Затем мы используем метод json_encode() для преобразования этого массива в строку JSON, которая будет передана в middleware через параметры.


В middleware можно получить эти параметры, как обычно, используя метод handle():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php

namespace AppHttpMiddleware;

use Closure;

class MyMiddleware
{
    public function handle($request, Closure $next, $params)
    {
        $middlewareParams = json_decode($params, true);

        // Далее идет ваш код middleware

        return $next($request);
    }
}


Здесь мы используем переменную $params, которая содержит параметры middleware, переданные в виде строки JSON. Мы преобразуем эту строку в массив, используя метод json_decode(), и затем используем этот массив в нашем middleware.

Пользователь

от willa_will , 3 месяца назад

@terrence 

Важно отметить, что передача параметров middleware из контроллера работает только для middleware, которые определены в виде классов и не работает для middleware, определенных в виде функций.