티스토리 뷰

이슈

특정 모델의 CRUD 후 옵저버에서 모델 attributes 이외 매개변수 또는 서비스 전달하기.

 

해결방안

1. Observer bind

use Illuminate\Container\Container;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Events\Dispatcher;
use App\Models\UserModel;
use App\Observers\UserObserver;

...
$args = []; // UserModel Attributes 이외 사용할 매개변수

$container = new Container();
$container->bind(UserObserver::class, fn($app) => new UserObserver($args));
$dispatcher = new Dispatcher($container);
Model::setEventDispatcher($dispatcher);
User::observe(UserObserver::class);

 

class UserObserver
{
	/**
     * @var array
     */
    private $args; // 매개변수

	function __construct(array $args)
    {
    	$this->args = $args;
    }


	/**
     * handle User created
     * @param User
     */
	function created(User $user)
    {
    	//
    }
    
    /**
     * handle User updated
     * @param User
     */
    function updated(User $user)
    {
    	//
    }
}

 

댓글