đ đŽđđđ˛đŋđļđģđ´ đđđ˛đģđ-đđŋđļđđ˛đģ đđ˛đ°đŧđđŊđšđļđģđ´ đļđģ đđŽđŋđŽđđ˛đš
āĻāĻĒāύāĻžāϰ Laravel āĻāύā§āĻā§āϰā§āϞāĻžāϰāĻā§āϞ⧠āĻĒā§āϰāĻžāϝāĻŧāĻļāĻ āĻŦāĻŋāĻāύā§āϏ āϞāĻāĻŋāĻā§āϰ (business logic) āϏā§āϤā§āĻĒ āĻŦāĻž āĻĄāĻžāĻŽā§āĻĒāĻŋāĻ āĻā§āϰāĻžāĻāύā§āĻĄ āĻšāϝāĻŧā§ āĻāĻ ā§āĨ¤
āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϰā§āĻāĻŋāϏā§āĻā§āϰā§āĻļāύ āĻĢā§āϞ⧠āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰā§āύāĨ¤ āĻļā§āĻā§āϰāĻ, āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻŽāĻžāϤā§āϰ āĻŽā§āĻĨāĻĄā§āϰ āĻŽāϧā§āϝ⧠āĻāĻŽā§āϞ āύā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāύ, Slack āĻ ā§āϝāĻžāϞāĻžāϰā§āĻ, āĻ āĻĄāĻŋāĻ āϞāĻ āĻāĻŦāĻ API āĻāϞ āϝā§āĻā§āϤ āĻāϰ⧠āĻĢā§āϞā§āύāĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ 'fat controller' āϤā§āϰāĻŋ āĻāϰā§āĨ¤
Fat controller āĻāĻĒāύāĻžāϰ āĻā§āĻĄāĻā§ āĻāĻā§āĻā§āϰ (fragile) āĻāϰ⧠āϤā§āϞā§āĨ¤ āĻāĻā§āϞ⧠āĻā§āϏā§āĻ āĻāϰāĻž āĻāĻ āĻŋāύāĨ¤ āĻāĻā§āϞ⧠Single Responsibility Principle āϞāĻā§āĻāύ āĻāϰā§āĨ¤
āĻāĻāĻŋ āĻ āĻŋāĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāϰ RabbitMQ-āĻāϰ āĻŽāϤ⧠āĻāĻāĻŋāϞ āĻā§āϞā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻāĨ¤ Laravel-āĻāϰ āύāĻŋāĻāϏā§āĻŦ āĻāĻāĻāĻŋ āĻŦāĻŋāϞā§āĻ-āĻāύ āĻāĻā§āύā§āĻ āϏāĻŋāϏā§āĻā§āĻŽ āϰāϝāĻŧā§āĻā§ āϝāĻž āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻĒā§āϰāϝāĻŧā§āĻāύ⧠āĻāĻžāĻ āĻāϰā§āĨ¤
Tight coupling-āĻāϰ āϏāĻŽāϏā§āϝāĻžāĻā§āϞā§: āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āύāĻŋāĻāĻāϞā§āĻāĻžāϰ API āϧā§āϰāĻāϤāĻŋāϰ āĻšāϝāĻŧ, āϤāĻŦā§ āĻāĻĒāύāĻžāϰ āĻāĻāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰā§āĻļāύāĻ āϧā§āϰ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āĻŽā§āĻāϞ āϏāĻžāϰā§āĻāĻŋāϏ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧ, āϤāĻŦā§ āĻĒā§āϰ⧠āϰāĻŋāĻā§āϝāĻŧā§āϏā§āĻāĻāĻŋāĻ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧāĨ¤
āϏāĻŽāĻžāϧāĻžāύ: Event-Driven ArchitectureāĨ¤
āĻāĻā§āύā§āĻāĻā§āϞ⧠āĻāĻāĻāĻŋ āĻŽāĻŋāĻĄāϞ āϞā§āϝāĻŧāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤ āĻāĻĒāύāĻžāϰ āĻāύā§āĻā§āϰā§āϞāĻžāϰ āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāĻāĻļāύ āĻā§āώāĻŖāĻž āĻāϰā§āĨ¤ āϞāĻŋāϏā§āύāĻžāϰāĻā§āϞ⧠(Listeners) āϏā§āĻŦāĻžāϧā§āύāĻāĻžāĻŦā§ āϏā§āĻ āĻ ā§āϝāĻžāĻāĻļāύ⧠āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻāĻžāύāĻžāϝāĻŧāĨ¤
āĻāĻāĻāĻŋ āϞāĻŋāύ (lean) āĻāύā§āĻā§āϰā§āϞāĻžāϰ āĻĻā§āĻāϤ⧠āĻāĻŽāύ āĻšāϝāĻŧ:
public function register(RegisterRequest $request)
{
$user = User::create($request->validated());
UserRegistered::dispatch($user);
return response()->json(['message' => 'Success'], 201);
}
āĻāύā§āĻā§āϰā§āϞāĻžāϰāĻāĻŋ āĻāĻāύ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĄā§āĻāĻž āĻĒāĻžāϰāϏāĻŋāϏā§āĻā§āύā§āϏ (data persistence) āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰā§āĨ¤ āĻāĻāĻŋ āϏāĻžāĻāĻĄ āĻāĻĢā§āĻā§āĻ (side effects) āύāĻŋāϝāĻŧā§ āĻŽāĻžāĻĨāĻž āĻāĻžāĻŽāĻžāϝāĻŧ āύāĻžāĨ¤
āĻāĻĒāύāĻŋ āϤāĻŋāύāĻāĻŋ āĻĒā§āϰāϧāĻžāύ āϏā§āĻŦāĻŋāϧāĻž āĻĒāĻžāĻŦā§āύ:
- āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ: āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āϤāĻžā§āĻā§āώāĻŖāĻŋāĻāĻāĻžāĻŦā§ āϰā§āϏāĻĒāύā§āϏ āĻĒāĻžāύāĨ¤ ShouldQueue āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻžāϰ⧠āĻāĻžāĻāĻā§āϞ⧠āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āĻāϞā§āĨ¤
- āϰā§āĻāĻŋāϞāĻŋāϝāĻŧā§āύā§āϏ (Resilience): āϝāĻĻāĻŋ āĻā§āύ⧠āϏāĻžāϰā§āĻāĻŋāϏ āĻĄāĻžāĻāύ āĻĨāĻžāĻā§, āϤāĻŦā§ āϞāĻŋāϏā§āύāĻžāϰ āĻŽā§āϞ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āύāώā§āĻ āύāĻž āĻāϰā§āĻ āĻāĻžāĻāĻāĻŋ āĻĒā§āύāϰāĻžāϝāĻŧ āĻā§āώā§āĻāĻž (retry) āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
- āĻāĻā§āϏāĻā§āύāϏāĻŋāĻŦāĻŋāϞāĻŋāĻāĻŋ (Extensibility): āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āύāϤā§āύ āϞāĻŋāϏā§āύāĻžāϰ āϝā§āĻ āĻāϰāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĒā§āĻļ āύā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāύā§āϰ āĻŽāϤ⧠āύāϤā§āύ āĻĢāĻŋāĻāĻžāϰ āϝā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĒāύāĻžāĻā§ āĻŽā§āϞ āĻāύā§āĻā§āϰā§āϞāĻžāϰāĻāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻšāĻŦā§ āύāĻžāĨ¤
āĻ āύā§āϏāϰāĻŖā§āϝāĻŧ āϏā§āϰāĻž āĻ āύā§āĻļā§āϞāύāϏāĻŽā§āĻš (Best practices):
- āϏāĻžāĻāĻĄ āĻāĻĢā§āĻā§āĻā§āϰ āĻāĻĒāϰ āĻā§āϰā§āϤā§āĻŦ āĻĻāĻŋāύ: āĻĒā§āϏā§āĻ-āĻĒā§āϰāϏā§āϏāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ āĻāĻā§āύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āϝ⧠āĻā§āϰ āϞāĻāĻŋāĻ āϤāĻžā§āĻā§āώāĻŖāĻŋāĻāĻāĻžāĻŦā§ āϏāĻŽā§āĻĒāύā§āύ āĻšāĻāϝāĻŧāĻž āĻĒā§āϰāϝāĻŧā§āĻāύ, āϏā§āĻāĻŋāϰ āĻāύā§āϝ āĻāĻā§āύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ āύāĻžāĨ¤
- āĻŦāϰā§āĻŖāύāĻžāĻŽā§āϞāĻ āύāĻžāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ: OrderPlaced āĻŦāĻž UserRegistered-āĻāϰ āĻŽāϤ⧠āĻĒāĻžāϏā§āĻ-āĻā§āύāϏ (past-tense) āύāĻžāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āĻāĻāĻŋ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰ⧠āϝ⧠āĻāĻžāĻāĻāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝ⧠āϏāĻŽā§āĻĒāύā§āύ āĻšāϝāĻŧā§āĻā§āĨ¤
- āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻ ā§āϝāĻžāĻŦāϏā§āĻā§āϰāĻžāĻāĻļāύ (over-abstraction) āĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻāϞā§āύ: āϝāĻĻāĻŋ āĻā§āĻĄā§āϰ āĻāĻāĻāĻŋ āĻ āĻāĻļ āϏāĻšāĻ āĻšāϝāĻŧ āĻāĻŦāĻ āĻā§āĻŦāϞ āĻāĻ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ, āϤāĻŦā§ āĻāĻā§āύā§āĻā§āϰ āĻā§āϝāĻŧā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āĻāϞ āĻāϰāĻž āĻāĻžāϞā§āĨ¤
āĻĄā§āĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻāύā§āϝ Eloquent Observers āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āĻŦāĻŋāĻāύā§āϏ āĻ ā§āϝāĻžāĻāĻļāύā§āϰ āĻāύā§āϝ Events āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
āĻāĻā§āύā§āĻā§ āϰāĻŋāĻĢā§āϝāĻžāĻā§āĻāϰ āĻāϰāĻž āĻŽāĻžāύ⧠āĻšāϞ⧠āϏā§āĻĨāĻžāϝāĻŧāĻŋāϤā§āĻŦ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻžāĨ¤ āĻāĻāĻŋ āĻāĻĒāύāĻžāϰ āĻā§āĻĄāĻā§ āĻĄāĻŋāĻŦāĻžāĻ āĻāϰāĻž āϏāĻšāĻ āĻāĻŦāĻ āĻā§āϏā§āĻ āĻāϰāĻž āĻĻā§āϰā§āϤ āĻāϰ⧠āϤā§āϞā§āĨ¤
āĻāĻāĻ āĻāĻĒāύāĻžāϰ āĻāύā§āĻā§āϰā§āϞāĻžāϰā§āϰ āĻāĻāĻāĻŋ āĻāĻāĻŋāϞ āĻŦāĻž 'noisy' āϏāĻžāĻāĻĄ āĻāĻĢā§āĻā§āĻ āĻŦā§āĻā§ āύāĻŋāύ āĻāĻŦāĻ āϏā§āĻāĻŋāĻā§ āĻāĻāĻāĻŋ āϞāĻŋāϏā§āύāĻžāϰ⧠āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āĻāϰā§āύāĨ¤
āĻāĻ āϏā§āϝāĻžāύā§āĻĄāĻŦāĻā§āϏ āĻāĻĻāĻžāĻšāϰāĻŖāĻāĻŋ āĻā§āώā§āĻāĻž āĻāϰ⧠āĻĻā§āĻā§āύ: https://onlinephp.io/c/1f7b2
āĻĢā§āϝāĻžāĻ āĻāύā§āĻā§āϰā§āϞāĻžāϰ āĻĨā§āĻā§ āĻĻā§āϰā§: āϞāĻžāϰāĻžāĻā§āϞ⧠āĻāĻā§āύā§āĻ-āĻĄā§āϰāĻŋāĻā§āύ āĻĄāĻŋāĻāĻžāĻĒāϞāĻŋāĻā§ā§ āĻĻāĻā§āώāϤāĻž āĻ āϰā§āĻāύ
āϏāĻŽāϏā§āϝāĻž: "āĻĢā§āϝāĻžāĻ āĻāύā§āĻā§āϰā§āϞāĻžāϰ" āĻ ā§āϝāĻžāύā§āĻāĻŋ-āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
āĻāĻĒāύāĻžāϰ āϞāĻžāϰāĻžāĻā§āϞ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āϝāĻāύ āĻŦā§ āĻšāϤ⧠āĻĨāĻžāĻā§, āĻāĻĒāύāĻŋ āĻšā§āϤ⧠āϞāĻā§āώā§āϝ āĻāϰāĻŦā§āύ āϝ⧠āĻāĻĒāύāĻžāϰ āĻāύā§āĻā§āϰā§āϞāĻžāϰāĻā§āϞ⧠āĻĻāĻŋāύ āĻĻāĻŋāύ āĻ āύā§āĻ āĻŦā§āĻļāĻŋ Bloated āĻŦāĻž āĻāĻāĻŋāϞ āĻšā§ā§ āĻāĻ āĻā§āĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻāĻāύāĻž āϝāĻž "Fat Controller" āĻ ā§āϝāĻžāύā§āĻāĻŋ-āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻšāĻŋāϏā§āĻŦā§ āĻĒāϰāĻŋāĻāĻŋāϤāĨ¤ āĻāĻāĻāĻŋ āĻĢā§āϝāĻžāĻ āĻāύā§āĻā§āϰā§āϞāĻžāϰ āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻāύā§āĻā§āϰā§āϞāĻžāϰ āϝāĻž āĻ āύā§āĻ āĻŦā§āĻļāĻŋ āĻĻāĻžā§āĻŋāϤā§āĻŦ āĻĒāĻžāϞāύ āĻāϰā§âāϝā§āĻŽāύ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ āĻāϰāĻž, āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻž, āĻĨāĻžāϰā§āĻĄ-āĻĒāĻžāϰā§āĻāĻŋ āĻāĻĒāĻŋāĻāĻ āĻāϞ āĻāϰāĻž, āĻāĻŽā§āĻāϞ āĻĒāĻžāĻ āĻžāύ⧠āĻāĻŦāĻ āĻāϰāĻ āĻ āύā§āĻ āĻāĻŋāĻā§âāϏāĻŦāĻ āĻāĻāĻāĻŋ āĻŽāĻžāϤā§āϰ āĻŽā§āĻĨāĻĄā§āϰ āĻŽāϧā§āϝā§āĨ¤ āĻāϰ āĻĢāϞ⧠āĻā§āĻĄ āĻā§āϏā§āĻ āĻāϰāĻž, āĻŽā§āĻāύāĻā§āĻāύ āĻāϰāĻž āĻāĻŦāĻ āϏā§āĻā§āϞ āĻāϰāĻž āĻ āϤā§āϝāύā§āϤ āĻāĻ āĻŋāύ āĻšā§ā§ āĻĒā§ā§āĨ¤
āϏāĻŽāĻžāϧāĻžāύ: āĻāĻā§āύā§āĻ-āĻĄā§āϰāĻŋāĻā§āύ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĄāĻŋāĻāĻžāĻĒāϞāĻŋāĻ
āĻĄāĻŋāĻāĻžāĻĒāϞāĻŋāĻ (Decoupling) āĻšāϞ⧠āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āĻŦāĻŋāĻāĻŋāύā§āύ āĻ āĻāĻļā§āϰ āĻŽāϧā§āϝ⧠āύāĻŋāϰā§āĻāϰāĻļā§āϞāϤāĻž (dependency) āĻāĻŽāĻŋā§ā§ āĻāύāĻžāϰ āĻāĻāĻāĻŋ āĻĒā§āϰāĻā§āϰāĻŋā§āĻžāĨ¤ āϝāĻāύ āĻāĻāĻāĻŋ āĻ āĻāĻļ āĻ āύā§āϝ āĻāĻāĻāĻŋ āĻ āĻāĻļā§āϰ āĻāĻĒāϰ āϏāϰāĻžāϏāϰāĻŋ āύāĻŋāϰā§āĻāϰ āύāĻž āĻāϰā§, āϤāĻāύ āĻāĻŽāϰāĻž āĻŦāϞāĻŋ āϝ⧠āϤāĻžāϰāĻž 'decoupled'āĨ¤ āĻĄāĻŋāĻāĻžāĻĒāϞāĻŋāĻā§ā§āϰ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻāĻŋ āĻ āĻāĻļ āĻ āύā§āϝ āĻāĻāĻāĻŋ āĻ āĻāĻļāĻā§ āϏāϰāĻžāϏāϰāĻŋ āĻāϞ āĻāϰāĻžāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤā§, āϤāĻžāϰāĻž āĻāĻā§āύā§āĻā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϝā§āĻāĻžāϝā§āĻ āĻāϰā§āĨ¤
āĻāĻā§āύā§āĻ-āĻĄā§āϰāĻŋāĻā§āύ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ (Event-Driven Architecture - EDA) āĻāĻĒāύāĻžāĻā§ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ⧠āĻā§āύ⧠āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻāĻāύāĻž āĻāĻāϞ⧠āĻāĻāĻāĻŋ āĻāĻā§āύā§āĻ āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰāĻžāϰ āϏā§āĻŦāĻŋāϧāĻž āĻĻā§ā§āĨ¤ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻ āύā§āϝāĻžāύā§āϝ āĻ āĻāĻļ āϏā§āĻ āĻāĻā§āύā§āĻā§āϰ āĻāύā§āϝ "listen" āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āϏā§āĻ āĻ āύā§āϝāĻžā§ā§ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āϝā§āĻāĻžāύ⧠āĻŽā§āϞ āĻ āĻāĻļāĻāĻŋ āĻāĻžāύāϤā§āĻ āĻĒāĻžāϰ⧠āύāĻž āϝ⧠āĻ āύā§āϝ āĻā§āύ⧠āĻ āĻāĻļ āϏā§āĻ āĻāĻžāĻ āĻāϰāĻā§āĨ¤
āϞāĻžāϰāĻžāĻā§āϞ⧠āĻāĻā§āύā§āĻ āĻāĻŦāĻ āϞāĻŋāϏā§āύāĻžāϰ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāĻž
āϞāĻžāϰāĻžāĻā§āϞ āϤāĻžāϰ āĻŦāĻŋāϞā§āĻ-āĻāύ Event āĻāĻŦāĻ Listener āĻā§āϞāĻžāϏāĻā§āϞā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύāĻāĻŋ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāĻž āĻ
āϤā§āϝāύā§āϤ āϏāĻšāĻ āĻāϰ⧠āϤā§āϞā§āĻā§āĨ¤
āϧāĻžāĻĒ ā§§: āĻāĻāĻāĻŋ āĻāĻā§āύā§āĻ āϤā§āϰāĻŋ āĻāϰāĻž
āĻāĻāĻāĻŋ āĻāĻā§āύā§āĻ āĻšāϞ⧠āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻā§āϞāĻžāϏ āϝāĻž āĻāĻāĻž āĻāĻāύāĻžāϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻĄāĻžāĻāĻž āϧāĻžāϰāĻŖ āĻāϰā§āĨ¤
php artisan make:event UserRegistered
āϧāĻžāĻĒ ā§¨: āĻāĻāĻāĻŋ āϞāĻŋāϏā§āύāĻžāϰ āϤā§āϰāĻŋ āĻāϰāĻž
āĻāĻāĻāĻŋ āϞāĻŋāϏā§āύāĻžāϰ āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏ āϝāĻž āĻāĻā§āύā§āĻāĻāĻŋ āĻĢāĻžā§āĻžāϰ āĻšāĻā§āĻžāϰ āĻĒāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻžāĻ āϏāĻŽā§āĻĒāύā§āύ āĻāϰā§āĨ¤
php artisan make:listener SendWelcomeEmail --event=UserRegistered
āϧāĻžāĻĒ ā§Š: āϏā§āĻā§āϞ⧠āϰā§āĻāĻŋāϏā§āĻāĻžāϰ āĻāϰāĻž
āϞāĻžāϰāĻžāĻā§āϞā§, āĻāĻĒāύāĻŋ āĻāĻā§āϞ⧠EventServiceProvider-āĻ āϰā§āĻāĻŋāϏā§āĻāĻžāϰ āĻāϰā§āύāĨ¤
āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰā§āĻļāύ
āĻāϞā§āύ āĻāĻāĻāĻŋ "āĻĢā§āϝāĻžāĻ āĻāύā§āĻā§āϰā§āϞāĻžāϰ" āĻāĻŦāĻ āĻāĻāĻāĻŋ "āĻāĻā§āύā§āĻ-āĻĄā§āϰāĻŋāĻā§āύ" āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻŽāϧā§āϝ⧠āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻĻā§āĻāĻŋāĨ¤
āĻĢā§āϝāĻžāĻ āĻāύā§āĻā§āϰā§āϞāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋ (āĻāĻžāϰāĻžāĻĒ āĻ āĻā§āϝāĻžāϏ)
public function store(Request $request)
{
// ā§§. āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ
$validated = $request->validate([...]);
// ⧍. āĻāĻāĻāĻžāϰ āϤā§āϰāĻŋ āĻāϰāĻž
$user = User::create($validated);
// ā§Š. āĻā§ā§āϞāĻāĻžāĻŽ āĻāĻŽā§āĻāϞ āĻĒāĻžāĻ āĻžāύā§
Mail::to($user)->send(new WelcomeEmail($user));
// ā§Ē. āĻāĻāĻāĻžāϰ āĻĒā§āϰā§āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰāĻž
Profile::create(['user_id' => $user->id]);
// ā§Ģ. āĻ
ā§āϝāĻžāĻā§āĻāĻŋāĻāĻŋāĻāĻŋ āϞāĻ āĻāϰāĻž
Log::info('New user registered: ' . $user->email);
return redirect()->route('dashboard');
}
āĻāĻā§āύā§āĻ-āĻĄā§āϰāĻŋāĻā§āύ āĻĒāĻĻā§āϧāϤāĻŋ (āϏā§āϰāĻž āĻ āĻā§āϝāĻžāϏ)
public function store(Request $request)
{
// ā§§. āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ
$validated = $request->validate([...]);
// ⧍. āĻāĻāĻāĻžāϰ āϤā§āϰāĻŋ āĻāϰāĻž
$user = User::create($validated);
// ā§Š. āĻāĻā§āύā§āĻ āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰāĻž
event(new UserRegistered($user));
return redirect()->route('dashboard');
}
āĻāĻāύ, UserRegistered āĻāĻā§āύā§āĻāĻāĻŋ āĻāĻāĻžāϧāĻŋāĻ āϞāĻŋāϏā§āύāĻžāϰ āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§:
SendWelcomeEmailCreateUserProfileLogUserRegistration
āĻāϰāĻ āĻāύā§āύāϤ āĻĒāϰā§āϝāĻžā§ā§: āĻ āĻŦāĻāĻžāϰāĻāĻžāϰ āĻāĻŦāĻ āĻāĻŋāĻ (Observers and Queues)
- Observers: āĻāĻĒāύāĻŋ