
рдкреЗрд╢реЗрд╡рд░ рдкрд╛рдареНрдпрдХреНрд░рдо "рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рд╛рд░рд╡реЗрд▓" рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдлреНрд░реИрдХ рд╡рд╛рди рдбреЗрд░ рд╣рд░реНрдЯрди рдФрд░ рд╕реНрдкреИрдЯреА рдЯреАрдо рдиреЗ рд▓рд╛рд░рд╡реЗрд▓ рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдкрд░ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреА рд╣реИ, рдПрдХ рдкреИрдХреЗрдЬ рдЬреЛ рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд▓рд╛рд░рд╡реЗрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкрд╣рд▓рд╛ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг (v1.0.0) рдЙрдкрд▓рдмреНрдз рд╣реИ!
рдЖрдк рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдИрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░, рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреИрдХреЗрдЯ рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкреИрдХреЗрдЬ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддрд╛ рд╣реИ!
composer require spatie/laravel-event-projector:^1.0.0
рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП PHP 7.2 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ PHP рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓рд╛рд░рд╡реЗрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдХрдо рд╕реЗ рдХрдо 7.1.3 рдХреЗ PHP рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
"рдЗрд╡реЗрдВрдЯ рдЬрдирд░реЗрд╢рди" рдХреНрдпрд╛ рд╣реИ
рдШрдЯрдирд╛рдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦ рдореЗрдВ , рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдбреЛрдореЗрди рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕ рдбреЗрдЯрд╛ рдкрд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░реЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдкрд░рд┐рд╢рд┐рд╖реНрдЯ-рдХреЗрд╡рд▓ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рднрдВрдбрд╛рд░рдг рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рднрдВрдбрд╛рд░рдг рд░рд┐рдХреЙрд░реНрдб рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЛрдореЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рднреМрддрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдФрд░ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдмреЗрд╣рддрд░ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА, рдмрдврд╝реА рд╣реБрдИ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдФрд░ рдкрд░рд┐рдЪрд╛рд▓рди рджрдХреНрд╖рддрд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрдирджреЗрди рдбреЗрдЯрд╛ рдХреА рд╕реНрдерд┐рд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд▓реЙрдЧ рдФрд░ рдЗрддрд┐рд╣рд╛рд╕ рд░рдЦрдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдкреВрд░рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдкреВрд░рд╛ рд▓реЗрдЦ рдкрдврд╝реЗрдВред рдпрд╣ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЙрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЗрд╡реЗрдВрдЯ рдЬрдирд░реЗрд╢рди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рднреА рдкрд╕рдВрдж рд╣реИ, рдЬреЛ рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдкрд░рд┐рдЪрдп рдореЗрдВ рджреА рдЧрдИ рд╣реИ :
рдШрдЯрдирд╛рдУрдВ рдХреА рдкреАрдврд╝реА рдбреЗрдЯрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдорд╛рди рд╣реИ, рдЬреИрд╕реЗ Git рдХреЛрдб рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЦреЛ рдЧрдпрд╛ рд╣реИ - рдЖрдкрдХреЛ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрд╡реЗрджрди рдЗрд╕ рд╕реНрдерд┐рддрд┐ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪрд╛ред
рдЗрд╡реЗрдВрдЯ рдЬрдирд░реЗрд╢рди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рд╣реЗрдЬрдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИред рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдмрдирддреА рд╣реИред
рд╕рдордЭ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЬреАрд╡рди рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ рдмреИрдВрдХ рд╣реИрдВред рдЖрдкрдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдЦрд╛рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдЦрд╛рддреЗ рдХреА рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рд╕рднреА рд▓реЗрдирджреЗрди рднреА рдпрд╛рдж рд░рдЦрдиреЗ рд╣реЛрдВрдЧреЗред рдЗрд╡реЗрдВрдЯ рдЬрдирд░реЗрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЦрд╛рддрд╛ рд╢реЗрд╖ рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рд▓реЗрдирджреЗрди рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣ рдХрдИ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдЗрд╡реЗрдВрдЯ рдкреАрдврд╝реА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдкреИрдХреЗрдЬ рдЗрд╡реЗрдВрдЯ рдкреАрдврд╝реА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рд▓рд╛рд░рд╡реЗрд▓ рдврд╛рдВрдЪреЗ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░, рдЗрд╡реЗрдВрдЯ рдЬрдирд░реЗрд╢рди рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдиреЗ рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХреА рдХрд┐ рд▓рд╛рд░рд╡реЗрд▓ рдврд╛рдВрдЪреЗ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИред
рд▓рд╛рд░рд╡реЗрд▓ рдЗрд╡реЗрдВрдЯрд┐рдВрдЧ рдмреЗрд╕рд┐рдХреНрд╕
рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдкреИрдХреЗрдЬ рдореЗрдВ рдЗрд╡реЗрдВрдЯ рдЬрдирд░реЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреМрди рд╕реЗ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рд╕реЗрдХреНрд╢рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ (рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рдЖрдХрд▓рди рдореЗрдВ рд╕рд╣реА рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдШрдЯрдирд╛рдУрдВ рдХреА рдкреАрдврд╝реА рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ) рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреА рдкреАрдврд╝реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рд╢рд╛рдирджрд╛рд░ рдореЙрдбрд▓
- рдХрдВрдзреЛрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдПрдБ
- рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХрдХреНрд╖рд╛рдПрдВ
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдИ рдЧрдИ createWithAttributes
рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбрд▓ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
namespace App; use App\Events\AccountCreated; use App\Events\AccountDeleted; use App\Events\MoneyAdded; use App\Events\MoneySubtracted; use Illuminate\Database\Eloquent\Model; use Ramsey\Uuid\Uuid; class Account extends Model { protected $guarded = []; protected $casts = [ 'broke_mail_send' => 'bool', ]; public static function createWithAttributes(array $attributes): Account { $attributes['uuid'] = (string) Uuid::uuid4(); event(new AccountCreated($attributes)); return static::uuid($attributes['uuid']); } public function addMoney(int $amount) { event(new MoneyAdded($this->uuid, $amount)); } public function subtractMoney(int $amount) { event(new MoneySubtracted($this->uuid, $amount)); } public function delete() { event(new AccountDeleted($this->uuid)); } public static function uuid(string $uuid): ?Account { return static::where('uuid', $uuid)->first(); } }
рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЦрд╛рддрд╛ рдЦреЛрд▓рдиреЗ, MoneySubtracted
MoneyAdded
, MoneySubtracted
рдФрд░ MoneyAdded
рдЬреИрд╕реА рдШрдЯрдирд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рд╣реЛрдЧрд╛, рдЦрд╛рддрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╢рдГ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЦрд╛рддреЗ рдореЗрдВ рдкреИрд╕реЗ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ, рдЦрд╛рддреЗ рд╕реЗ рдкреИрд╕реЗ рдирд┐рдХрд╛рд▓реЗ MoneySubtracted
рдФрд░ рдЦрд╛рддрд╛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд MoneyAdded
рдШрдЯрдирд╛ (рдХрд┐рд╕реА рдЦрд╛рддреЗ рдореЗрдВ рдкреИрд╕реЗ рдЬреЛрдбрд╝рдиреЗ) рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред ShouldBeStored рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдкреИрдХреЗрдЬ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
namespace App\Events; use Spatie\EventProjector\ShouldBeStored; class MoneyAdded implements ShouldBeStored { public $accountUuid; public $amount; public function __construct(string $accountUuid, int $amount) { $this->accountUuid = $accountUuid; $this->amount = $amount; } }
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЦрд╛рддреЗ рдореЗрдВ рдзрди рдХреА рднрд░рдкрд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдПрдХ рдЖрдВрд╢рд┐рдХ рдЙрджрд╛рд╣рд░рдг (рдореЗрд░реА рдкрд╕рдВрджреАрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдмреИрдВрдХрд┐рдВрдЧ рдШрдЯрдирд╛):
public function onMoneyAdded(MoneyAdded $event) { $account = Account::uuid($event->accountUuid); $account->balance += $event->amount; $account->save(); }
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рдзрди рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
Account::createWithAttributes(['name' => 'Luke']); Account::createWithAttributes(['name' => 'Leia']); $account = Account::where(['name' => 'Luke'])->first(); $anotherAccount = Account::where(['name' => 'Leia'])->first(); $account->addMoney(1000); $anotherAccount->addMoney(500); $account->subtractMoney(50);
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд▓реНрдпреВрдХ рдФрд░ рд▓реАрдпрд╛ рдХреЗ рдЦрд╛рддреЛрдВ рдореЗрдВ рд╕рдВрддреБрд▓рди рдЧрд╛рдВрдЧреЗрдп рдорд╛рдирдХ рдЛрдг рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЦреБрд▓реЗ рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХрд░реЗрдВрдЧреЗред
рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдн рд╕реЗ рдореЗрд░рд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ - рдЙрдиреНрд╣реЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдШрдЯрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдмреИрдВрдХ рдкреНрд░рддреНрдпреЗрдХ рдЦрд╛рддреЗ рдореЗрдВ рдФрд╕рдд рд╢реЗрд╖ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдмрдирд╛рдиреЗ, рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЦреЗрд▓рдиреЗ рдФрд░ рдЕрдВрдд рдореЗрдВ рдпрд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред
рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕рднреА "рд╕рд╣реА" рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЖ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ "рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реЛрддреА рд╣реИред"
рдФрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ PHP 7.2 рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рд╕реНрдкреИрдЯ рдЯреАрдо рдиреЗ рд▓рд╛рд░рд╡реЗрд▓ рдкрд░ рдПрдХ рдирдореВрдирд╛ рдЖрд╡реЗрджрди рднреА рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдкреИрдХреЗрдЬ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдЖрдк рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЧрд┐рдЯрд╣рдм рдкрд░ рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рднреА рдпреЛрдЧрджрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 15 рдкреНрд░рддрд┐рднрд╛рдЧреА рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ 1.0 рдХреА рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ рд╕рдВрднрд╡ рд╣реЛ рдЧрдИред рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо, Spatie! рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдПрдХ рдФрд░ рд╢рд╛рдирджрд╛рд░ рдкреИрдХреЗрдЬ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд▓рд╛рд░рд╡реЗрд▓ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╕рд░рд╛рд╣рд╛ рдЬрд╛рдПрдЧрд╛ред