За последние 24 часа нас посетили 18087 программистов и 1604 робота. Сейчас ищет 1501 программист ...

Параметры для Middleware

Тема в разделе "Laravel", создана пользователем Dimon2x, 30 авг 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Не понял, почему надо 3 параметра, а передаётся 1?

    PHP:
    1. namespace App\Http\Middleware;
    2.  
    3. use Closure;
    4.  
    5. class CheckRole
    6. {
    7.     public function handle($request, Closure $next, $role)
    8.     {
    9.         if (! $request->user()->hasRole($role)) {
    10.             // Redirect...
    11.         }
    12.  
    13.         return $next($request);
    14.     }
    15. }
    16.  
    17. Route::put('post/{id}', function ($id) {
    18.     /*
    19.      * Если пользователь редактор
    20.      * то дать ему доступ
    21.      */
    22. })->middleware('role:editor');
    в request попадает post/{id},
    в role попадает role:editor.

    Получается, что уже 2.

    Не понял, как работает $next

    Наверно получается, что в next попадает то же post/{id}',
    то есть если всё хорошо, то обновление сработает и
    будет отработан метод, который сделан для put('post/{id}'?
    За это и отвечает next?
     
    #1 Dimon2x, 30 авг 2018
    Последнее редактирование: 30 авг 2018
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    $next - это ссылка на функцию, которая должна отработать следующей после данного посредника. Но посредник сам решает, когда её надо вызвать. Часть параметров передаёт сам Laravel, тебе за это беспокоиться не надо.
     
    Dimon2x нравится это.
  3. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    В $next как раз будет обёрнутая function($id) { ... }
     
    Dimon2x нравится это.
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    $request один на всей цепочке и попадает во все мидлвары.
    Первые два аргумента обязательные для любого middleware. Пользовательский только role, вот он один и прописывается в вызове.
    $next($response); - это обычный способ продолжить (не прервать) выполнение запроса вплоть до контроллера или до замыкания из роута.
    --- Добавлено ---
    Вот здесь всё написано https://laravel.com/docs/5.6/middleware