Красноречивое событие не стреляет из CLI (за пределами Laravel)

У меня есть следующий обработчик событий в моей модели:

<?php
namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
//...

public static function boot()
{
parent::boot();

static::saving(function ($user) {
// die('inside');
if (empty($user->username)) {

$base = strtolower($user->first_name . '.' . $user->last_name);

do {
$username = $base . @$suffix;
$duplicate = User::where('username', '=', $username)->first();
} while($duplicate and $suffix = rand(1000, 9999));

// return the original/ generated username
$user->username = $username;
}
});
}
}

В основном, когда имя пользователя не установлено, модель автоматически генерирует уникальное имя пользователя из имени / фамилии. Это отлично работает в браузере. Но не в CLI, когда я запускаю свои тесты — имя пользователя не установлено, поэтому он пытается вставить без имени пользователя, которое не принимает моя таблица mysql.

Ниже описано, как я настраиваю консоль Eloquent:

$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection([
'driver' => 'mysql',
'host' => 'localhost',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'database' => 'sso_dev',
'username' => 'root',
'password' => 'vagrant1',
]);
$capsule->setEventDispatcher( new \Illuminate\Events\Dispatcher( new \Illuminate\Container\Container ));
$capsule->bootEloquent();
$capsule->setAsGlobal();

И веб-среда, и тестирование используют один и тот же код. Если я прокомментирую строку setEventDispatcher затем среда браузера выдает ошибку, поскольку обработчик событий не запускается. Так что я знаю, что диспетчер событий выполняет свою работу там. Просто не тестирование среды CLI. Любая причина, почему это может быть?

Кстати, я использую Eloquent 5.3.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector