2017-02-07 4 views
1

в основном то, что я хочу сделать, это использовать special token auto loginСобытия laravel, они выполняются синхронно?

но: только для подмножества страниц. Скажем, комментирование в порядке с логином входа. Изменение информации о кредитной карте и предметах покупки не соответствует имени входа в токен.

Поэтому я хочу сохранить логическое значение token_login на столе users.

На каждом входе я установить token_login ложь с помощью обработчика событий

class EventServiceProvider extends ServiceProvider 
{ 

    protected $listen = [ 
     'Illuminate\Auth\Events\Login' => [PostLoginListener::class], 
    ]; 

Когда настоящий маркер Войти выполняется, я поставил его так.

Так я ожидаю, что событие дозвонились -> token_login = ложь

то код продолжает работать, устанавливая token_login = верно в случае фактического автоматического входа.

Теперь это требует, чтобы событие фактически всегда срабатывало синхронно и всегда перед другим кодом. Это так?

+0

Я не знаю, могли ли вы видеть это как ответ, но события увольняются с помощью методов fireEvent, например. https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L1473 –

ответ

5

Пока ваш PostLoginListener не реализует интерфейс Illuminate\Contracts\Queue\ShouldQueue, ваше событие будет обрабатываться синхронно.

1

Поскольку PHP является синхронным языком (если вы не используете HHVM или Hack), события всегда запускаются в том же порядке. Таким образом, вы можете проверить, срабатывает ли это событие перед другим, а затем перейти дальше.

Редактировать: Способ Laravel запускает события в основном на основе порядка, в котором ваш массив ServiceProvider хранится внутри config/app.php.