Параметры промежуточного программного обеспечения Laravel из конструктора контроллера

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

У меня это отлично работает в route.php:

Route::group(['middleware' => 'user-type:user'], function () {
  // routes
});

Теперь я хочу сделать это в конструкторе контроллера, но у меня возникают некоторые проблемы...

public function __construct()
{
    $this->middleware = 'event-is-active:voting';
}

И когда я перехожу по ссылке с указанным выше, я получаю следующую ошибку:

ErrorException in ControllerDispatcher.php line 127:
Invalid argument supplied for foreach()

Конечно, я делаю это неправильно - я не мог видеть, как это сделать в документах, и чтение исходников не помогло, но, возможно, я что-то упустил. Поэтому мне интересно, как правильно и возможно ли это? Любая помощь будет принята с благодарностью, спасибо!


person haakym    schedule 16.09.2015    source источник


Ответы (2)


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

Прежде всего, вы должны использовать laravel 5.1 для использования параметра промежуточного программного обеспечения.

Теперь вы можете установить промежуточное ПО в контроллере только в конструкторе.

Нравиться

function __construct()
{
    $this->middleware('event-is-active:voting');//this will applies to all methods of your controller
    $this->middleware('event-is-active:voting', ['only' => ['show', 'update']]);//this will applies only show,update methods of your controller

}

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

Допустим, вы используете 1. getShowUser($userId) 2. postUpdateUser($userId)

чем вам нужно применить промежуточное программное обеспечение в этих методах, как указано ниже:

function __construct()
{
    $this->middleware('event-is-active:voting', ['only' => ['getShowUser', 'postUpdateUser']]);

}
person Ahesanali Suthar    schedule 16.09.2015
comment
Спасибо за ваш ответ. Как мой синтаксис неверен? Единственная разница между моим кодом и вашим — это идентификатор public в методе построения. Я использую Laravel 5.1. Я хочу, чтобы он применялся ко всем моим методам, поэтому я не ограничивал его. - person haakym; 16.09.2015
comment
я нахожу ниже синтаксис неправильным. $this-›middleware = 'event-is-active:voting'; - person Ahesanali Suthar; 16.09.2015
comment
открытый идентификатор требуется для конструктора. Как бы то ни было, я только что продемонстрировал код, чтобы объяснить вам. - person Ahesanali Suthar; 16.09.2015
comment
Синтаксис Checkout для ПО промежуточного слоя контроллера в документации. laravel.com/docs/5.1/controllers#controller-middleware - person Ahesanali Suthar; 16.09.2015
comment
Ах, извините, я не понял скобки ааа! Сейчас попробую, большое спасибо! - person haakym; 16.09.2015
comment
Работаю сейчас, большое спасибо за ваш вклад - я думаю, один из тех дней! - person haakym; 16.09.2015
comment
Иногда это случается и со мной. - person Ahesanali Suthar; 16.09.2015

Попробуй это

function __construct()
{
    $this->middleware('user-type:param1,param2', ['only' => ['show', 'update']]);
}
person AliRNazari    schedule 16.09.2015