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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от richard , 2 года назад

@akeem 

В Laravel, вы можете передавать данные из middleware в контроллер, используя объект запроса (IlluminateHttpRequest). Объект запроса содержит все данные, которые были отправлены в приложение, включая данные, которые были добавлены в middleware.


Для передачи данных из middleware в контроллер вы можете использовать метод put() или merge() объекта запроса, чтобы добавить данные в его свойство $request->attributes. Затем вы можете получить эти данные в контроллере, используя метод get() объекта запроса.


Вот пример кода middleware, который добавляет данные в объект запроса и передает их в контроллер:

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

namespace AppHttpMiddleware;

use Closure;

class CustomMiddleware
{
    public function handle($request, Closure $next)
    {
        // добавляем данные в объект запроса
        $request->attributes->put('custom_data', ['foo' => 'bar']);

        return $next($request);
    }
}


Затем в вашем контроллере вы можете получить эти данные, используя метод get():

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

namespace AppHttpControllers;

use IlluminateHttpRequest;

class CustomController extends Controller
{
    public function index(Request $request)
    {
        // получаем данные из объекта запроса
        $customData = $request->get('custom_data');

        // делаем что-то с данными
        ...
    }
}


Вы также можете использовать метод merge(), чтобы добавлять данные в объект запроса, если у вас уже есть данные в свойстве $request->attributes. В этом случае новые данные будут объединены со старыми:

1
2
// добавляем данные в объект запроса
$request->attributes->merge(['custom_data' => ['foo' => 'bar']]);


В контроллере вы можете получить данные, как и раньше:

1
2
// получаем данные из объекта запроса
$customData = $request->get('custom_data');


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

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

@akeem 

Другой способ передачи данных из middleware в контроллер в Laravel - это использование сессий. Вы можете сохранить данные в сессии в middleware, а затем получить их в контроллере. Вот пример:


В middleware:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
namespace AppHttpMiddleware;

use Closure;

class CustomMiddleware
{
    public function handle($request, Closure $next)
    {
        // сохраняем данные в сессию
        session(['custom_data' => ['foo' => 'bar']]);

        return $next($request);
    }
}


В контроллере:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
namespace AppHttpControllers;

use IlluminateHttpRequest;

class CustomController extends Controller
{
    public function index(Request $request)
    {
        // получаем данные из сессии
        $customData = $request->session()->get('custom_data');

        // делаем что-то с данными
        ...
    }
}


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