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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

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

@marisa 

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

  1. Используя свойство запроса (Request)


Можно добавить свойство в объект запроса в middleware и получить доступ к нему в контроллере через метод $request->get('property_name'). Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// Middleware
public function handle($request, Closure $next)
{
    $request->merge(['user_id' => auth()->id()]);
    return $next($request);
}

// Controller
public function index(Request $request)
{
    $user_id = $request->get('user_id');
    //...
}


  1. Используя атрибут контроллера


Можно также передавать данные из middleware в контроллер через атрибут контроллера. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
// Middleware
public function handle($request, Closure $next)
{
    $user_id = auth()->id();
    app()->make('AppHttpControllersMyController')->userId = $user_id;
    return $next($request);
}

// Controller
class MyController extends Controller
{
    public $userId;

    public function index()
    {
        $user_id = $this->userId;
        //...
    }
}


  1. Используя метод контроллера


Можно вызвать метод контроллера из middleware и передать ему данные. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Middleware
public function handle($request, Closure $next)
{
    $user_id = auth()->id();
    app()->make('AppHttpControllersMyController')->setUserId($user_id);
    return $next($request);
}

// Controller
class MyController extends Controller
{
    public $userId;

    public function setUserId($userId)
    {
        $this->userId = $userId;
    }

    public function index()
    {
        $user_id = $this->userId;
        //...
    }
}


Какой из этих способов выбрать, зависит от конкретной ситуации и предпочтений разработчика.