Есть ли способ отправить параметры Наблюдателю в Eloquent ORM?
На основании документации laravel:
User::observe(UserObserver::class);
observe
метод получает класс, а не экземпляробъект.Поэтому я не могу сделать что-то вроде:
$observer = new MyComplexUserObserver($serviceA, $serviceB)
User::observe($observer);
Итак, в моем коде я могу сделать что-то вроде:
class MyComplexUserObserver
{
private $serviceA;
private $serviceB;
public function __constructor($serviceA, $serviceB){
$this->serviceA = $serviceA;
$this->serviceB = $serviceB;
}
public function created(User $user)
{
//Use parameters and services here, for example:
$this->serviceA->sendEmail($user);
}
}
Есть ли способ передать параметры или сервисы наблюдателю модели?
Я не использую laravel
напрямую, но я использую eloquent (illuminate/database
и illuminate/events
)
Я не пытаюсь отправить дополнительные параметры явному событию, напримерв: Наблюдатели Laravel - Любой способ передать дополнительные аргументы? , я пытаюсь создать наблюдателя с дополнительными параметрами.
ПОЛНОЕ РЕШЕНИЕ:
Спасибо @ martin-henriksen.
use Illuminate\Container\Container as IlluminateContainer;
$illuminateContainer = new IlluminateContainer();
$illuminateContainer->bind(UserObserver::class, function () use ($container) {
//$container is my project container
return new UserObserver($container->serviceA, $container->serviceB);
});
$dispatcher = new Dispatcher($illuminateContainer);
Model::setEventDispatcher($dispatcher); //Set eventDispatcher for all models (All models extends this base model)
User::observe(UserObserver::class);