рдореИрдереНрдпреВ рд╡реЗрдпреЗрд░ рдУрдлрд╝рд┐рдирдиреА рдмреНрд▓реЙрдЧ рд╕реЗ рдЬрд╝реЗрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ 2 рдореЗрдВ
EventManager
рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдереЛрдбрд╝рд╛ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рджред
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд▓реЗрдЦ
Zend\EventManager
рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛
Zend\EventManager
, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, PHP рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛-рдЖрдзрд╛рд░рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХреНрдпрд╛ рд▓рд╛рдн рд╣реИред ZF2 рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИред
рдореВрд▓ рдФрд░ рдЕрдиреБрд╡рд╛рдж zf2.dev4 рдХреА рд░рд┐рд▓реАрдЬ рдХреЗ рджреМрд░рд╛рди рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, .beta1 рд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдП рдереЗред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд▓реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдм рдФрд░ рдирд╣реАрдВред
рд╢рдмреНрджрд╛рд╡рд▓реА
- рдЗрд╡реЗрдВрдЯ рдореИрдиреЗрдЬрд░
рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (рд╢реНрд░реЛрддрд╛) рдХреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдирд╛рдорд╛рдВрдХрд┐рдд рдИрд╡реЗрдВрдЯ (рдИрд╡реЗрдВрдЯ) рдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрди рдИрд╡реЗрдВрдЯ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рднреА рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
- рд╢реНрд░реЛрддрд╛ (рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░)
рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди / рд╡рд┐рдзрд┐ред - рдШрдЯрдирд╛ (рдЗрд╡реЗрдВрдЯ)
рдПрдХ рдХреНрд░рд┐рдпрд╛ рдЬреЛ рдХреБрдЫ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИ
рдПрдХ рдШрдЯрдирд╛ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХрдм рдФрд░ рдХреИрд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдХрд┐рд╕ рд╡рд╕реНрддреБ рдиреЗ рдЗрд╕реЗ рдХрд╣рд╛, рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛, рдЖрджрд┐ред рдЗрд╕ рдШрдЯрдирд╛ рдХрд╛ рдПрдХ рдирд╛рдо рднреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рдирд╛рдо рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реБрдП рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдШрдЯрдирд╛ рдореЗрдВ рдмрд╛рдВрдзрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдЗрд╕ рд╕рдм рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдЪреАрдЬреЗрдВ:
EventManager
рд╡рд░реНрдЧ рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ред- рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдИрд╡реЗрдВрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред
- рдИрд╡реЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
EventManager::trigger()
рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
use Zend\EventManager\EventManager; $events = new EventManager(); $events->attach('do', function($e) { $event = $e->getName(); $params = $e->getParams(); printf( 'Handled event "%s", with parameters %s', $event, json_encode($params) ); }); $params = array('foo' => 'bar', 'baz' => 'bat'); $events->trigger('do', null, $params);
рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣рдо рдкреНрд░рд╛рдкреНрдд:
рд╣реИрдВрдбрд▓ рдХрд┐рдП рдЧрдП рдИрд╡реЗрдВрдЯ "рдбреВ", рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде {"рдлреВ": "рдмрд╛рд░", "рдмрд╛рдЬ": "рдмреИрдЯ"}
рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ!
рдиреЛрдЯ: рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо, рдПрдХ рд╕реНрдерд┐рд░ рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐ рдпрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди
$events->trigger()
рдкрджреНрдзрддрд┐ рдореЗрдВ рджреВрд╕рд░рд╛ "рдЕрд╢рдХреНрдд" рддрд░реНрдХ рдХреНрдпрд╛ рд╣реИ?
рдЖрдорддреМрд░ рдкрд░, рдПрдХ
EventManager
рдЙрдкрдпреЛрдЧ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рднреАрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдПрдХ "рд╕рдВрджрд░реНрдн" рдпрд╛ "рд▓рдХреНрд╖реНрдп" рд╣реИ, рдФрд░ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ред рдпрд╣ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрднреА-рдХрднреА рдЙрдкрдпреЛрдЧреА / рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
use Zend\EventManager\EventCollection, Zend\EventManager\EventManager; class Example { protected $events; public function setEventManager(EventCollection $events) { $this->events = $events; } public function events() { if (!$this->events) { $this->setEventManager(new EventManager( array(__CLASS__, get_called_class()) ); } return $this->events; } public function do($foo, $baz) { $params = compact('foo', 'baz'); $this->events()->trigger(__FUNCTION__, $this, $params); } } $example = new Example(); $example->events()->attach('do', function($e) { $event = $e->getName(); $target = get_class($e->getTarget());
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐
trigger()
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рддрд░реНрдХ, рд╣рдо рд╣реИрдВрдбрд▓рд░ (рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ
trigger()
рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣реИрдВрдбрд▓рд░ рдЗрд╕реЗ
$e->getTarget()
рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдХрд╛рд░рдг рдХреЗ рднреАрддрд░) :))ред
рдЖрдкрдХреЗ 2 рдкреНрд░рд╢реНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
EventCollection
рдХреНрдпрд╛ рд╣реИ?- рдФрд░ рд╣рдо рдХрд┐рд╕
EventManager
рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВ EventManager
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░?
рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рдЖрдЧреЗ рд╣реИред
EventCollection рдмрдирд╛рдо EventManager
рдЙрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛ ZF2 рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рд╣реИ Lisk рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
рд╕рд┐рджреНрдзрд╛рдВрдд ред рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛ рд╕рдХрддреА рд╣реИ: рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, "рдЖрдзрд╛рд░" рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП,
EventCollection
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдШрдЯрдирд╛рдУрдВ рдХреЛ
EventCollection
рдХрд░рдиреЗ рдФрд░ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
EventManager
рдПрдХ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ ZF2 рдореЗрдВ рдЬрд╛рдПрдЧрд╛ред
StaticEventManager
EventManager рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкрд╣рд▓реВ StaticEventCollection рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдЖрдкрдХреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рди рдХреЗрд╡рд▓ рдирд╛рдорд┐рдд рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджрд░реНрдн рдпрд╛ рд▓рдХреНрд╖реНрдп рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХреА рдЧрдИ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреАред
EventManager
, рдЬрдм рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ
StaticEventCollection
рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмреНрдб) рднреА рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
use Zend\EventManager\StaticEventManager; $events = StaticEventManager::getInstance(); $events->attach('Example', 'do', function($e) { $event = $e->getName(); $target = get_class($e->getTarget());
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐
attach()
рдкрджреНрдзрддрд┐ рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ, рд╣рдо рд╕рдВрджрд░реНрдн рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ - 'рдЙрджрд╛рд╣рд░рдг', рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, 'рдбреВ' рдИрд╡реЗрдВрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрджрд┐ рдпрд╣ рдИрд╡реЗрдВрдЯ 'рдЙрджрд╛рд╣рд░рдг' рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╣реИ рдЬрд╣рд╛рдВ
EventManager
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
EventManager
рдПрдХ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЖрдкрдХреЛ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдирд╛рдо (рдУрдВ) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк
StaticEventManager
рд╕реЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдВрджрд░реНрднреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЗрди рд╕рдВрджрд░реНрднреЛрдВ рд╕реЗ рд╕рднреА рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╡реЗрдВрдЯ
EventManager
рд╕реЗ рд╕реАрдзреЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ
EventManager
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкрд┐рдЫрд▓реЗ 2 рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрдЧ рдФрд░ рд╕реНрдерд┐рд░ рдШрдЯрдирд╛ рд╣реИрдВрдбрд▓рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдорд┐рд▓рд╛рдПрдВ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:
$example = new Example(); $example->do('bar', 'bat');
рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣рдо рдкреНрд░рд╛рдкреНрдд:
рд╕рдВрднрд╛рд▓рд╛ рдШрдЯрдирд╛ "рд▓рдХреНрд╖реНрдп" рдкрд░ "рдЙрджрд╛рд╣рд░рдг", рдорд╛рдкрджрдВрдбреЛрдВ {"рдлреВ": "рдмрд╛рд░", "рдмрд╛рдЬ": "рдмрд▓реНрд▓реЗ"} рдХреЗ рд╕рд╛рде
рдЕрдм рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
class SubExample extends Example { }
EventManager
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣рдо рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ - рдпрд╣
__CLASS__
рдФрд░
get_called_class()
рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдЖрдк
SubExample
рд╡рд░реНрдЧ рдХреЗ
do()
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ
do()
, рддреЛ рд╣рдорд╛рд░рд╛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдордиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХреЗрд╡рд▓ 'SubExample' рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рд╣реИрдВрдбрд▓рд░ рдХреЗрд╡рд▓
SubExample::do()
рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди
Example::do()
рд╕рд╛рде рдирд╣реАрдВ
Example::do()
ред
рд╕рдВрджрд░реНрдн рдпрд╛ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд╛рдореЛрдВ рдореЗрдВ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ; рдЖрдк рдордирдорд╛рдиреЗ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреИрд╢рд┐рдВрдЧ рдпрд╛ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рддреЛ рдЖрдк рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ "рд▓реЙрдЧ" рдФрд░ "рдХреИрд╢" рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрди рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдирд╣реАрдВред
рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдЗрд╡реЗрдВрдЯ рдореИрдиреЗрдЬрд░ рд╕реНрдереИрддрд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗ, рддреЛ рдЖрдк
null
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ
setStaticConnections()
рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$events->setStaticConnections(null);
рд╕реНрдереИрддрд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП:
$events->setStaticConnections(StaticEventManager::getInstance());
рд╢реНрд░реЛрддрд╛ рддрдбрд╝рдкрддрд╛ рд╣реИ
рдЖрдкрдХреЛ рдХрдИ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╡рд░реНрдЧ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЗрд╕ "рд╡рд░реНрдЧ рд╣реИрдВрдбрд▓рд░" рдореЗрдВ рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ "рдХреНрд▓рд╛рд╕ рд╣реИрдВрдбрд▓рд░" рдореЗрдВ
HandlerAggregate
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ 2 рддрд░реАрдХреЛрдВ рдХреЛ
attach(EventCollection $events)
рдХрд░рддрд╛ рд╣реИ
attach(EventCollection $events)
рдФрд░
detach(EventCollection $events)
ред
(рдореИрдВ рдЦреБрдж рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рд╣реИ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ)ред
use Zend\EventManager\Event, Zend\EventManager\EventCollection, Zend\EventManager\HandlerAggregate, Zend\Log\Logger; class LogEvents implements HandlerAggregate { protected $handlers = array(); protected $log; public function __construct(Logger $log) { $this->log = $log; } public function attach(EventCollection $events) { $this->handlers[] = $events->attach('do', array($this, 'log')); $this->handlers[] = $events->attach('doSomethingElse', array($this, 'log')); } public function detach(EventCollection $events) { foreach ($this->handlers as $key => $handler) { $events->detach($handler); unset($this->handlers[$key]; } $this->handlers = array(); } public function log(Event $e) { $event = $e->getName(); $params = $e->getParams(); $log->info(sprintf('%s: %s', $event, json_encode($params))); } }
рдРрд╕реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЗрд╡реЗрдВрдЯ рдореИрдиреЗрдЬрд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
$doLog = new LogEvents($logger); $events->attachAggregate($doLog);
рдФрд░ рд╣рдорд╛рд░реЗ рд╣реИрдВрдбрд▓рд░ (
LogEvents
) рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╕реНрдерд╛рди (рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╣реИрдВрдбрд▓рд░) рдореЗрдВ "рдЬрдЯрд┐рд▓" рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
detach()
рдкрджреНрдзрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
attach()
рддрд░рд╣, рдпрд╣ рдПрдХ
EventManager
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕рднреА рд╣реИрдВрдбрд▓рд░ (рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЗрд╕ рдПрд░реЗ рд╕реЗ -
$this->handlers[]
) рдХреЛ рдЗрд╡реЗрдВрдЯ рдореИрдиреЗрдЬрд░ рд╕реЗ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐
EventManager::attach()
рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ - рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ
LogEvents::attach()
рд╡рд┐рдзрд┐ рдореЗрдВ 'рд╕рдВрд▓рдЧреНрди' рдХрд░рддреЗ
LogEvents::attach()
ред
рд╣реИрдВрдбрд▓рд░ рдкрд░рд┐рдгрд╛рдо
рдЖрдкрдХреЛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрдИ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
EventManager
рдПрдХ
ResponseCollection
рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ
SplStack
рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ
SplStack
, рдФрд░ рдЖрдкрдХреЛ рд╕рднреА рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдЕрдВрддрд┐рдо рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рдгрд╛рдо рд╕реНрдЯреИрдХ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реЛрдЧрд╛)ред
SplStack
,
SplStack
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рд╣реИрдВ:
first()
- рдкрд╣рд▓реЗ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдоlast()
- рдЕрдВрддрд┐рдо рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдоcontains($value)
- рдкрд░рд┐рдгрд╛рдо рд╕реНрдЯреИрдХ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ, true
/ false
рджреЗрддрд╛ true
ред
рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрдм рдПрдХ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╢рд╛рдпрдж рдХреЛрдИ рд╣реИрдВрдбрд▓рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡реНрдпрд╡рдзрд╛рди рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рдпрджрд┐ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдШрдЯрдирд╛ рдХреЗ рдЖрд░рдВрднрдХрд░реНрддрд╛ рдХреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ; рдпрд╛ рд╣реИрдВрдбрд▓рд░ рдЕрдЪрд╛рдирдХ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ; рдпрд╛ рдХрд┐рд╕реА рдПрдХ рд╣реИрдВрдбрд▓рд░, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ 'рд╕реНрдЯреИрдХ' рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдБ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ,
EventManager
рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдХреИрд╢рд┐рдВрдЧ рддрдВрддреНрд░ рд╣реИред рдЕрдкрдиреА рдкрджреНрдзрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдк "рдХреИрд╢ рдореЗрдВ рдЦреЛрдЬ рдбреЗрдЯрд╛" рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╕реЗ рдПрдХ рдХреИрд╢ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдбреЗрдЯрд╛ рдкрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдХреА рд╣реИрдВрдбрд▓рд░ рдмрд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдХреИрд╢ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдбреЗрдЯрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ "рдХреИрд╢ рдЯреВ рд░рд╛рдЗрдЯ" рдИрд╡реЗрдВрдЯ рдХреЛ рдлрд╛рдпрд░ рдХрд░рддреЗ рд╣реИрдВ
EventManager
рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рд╡рд┐рд╢реЗрд╖
triggerUntil()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдж рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
public function someExpensiveCall($criteria1, $criteria2) { $params = compact('criteria1', 'criteria2'); $results = $this->events()->triggerUntil(__FUNCTION__, $this, $params, function ($r) { return ($r instanceof SomeResultClass); }); if ($results->stopped()) { return $results->last(); }
triggerUntil()
рдкрджреНрдзрддрд┐ рдХреА рджрд▓реАрд▓реЗрдВ
trigger()
рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде - рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдпрджрд┐ рд╡рд╣
true
, рддреЛ рдмрд╛рдж рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдмрд╛рдж, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓рдиреЗ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдорд╛рд░реЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
рдИрд╡реЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ
stopPropagation(true)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдШрдЯрдирд╛ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред
$events->attach('do', function ($e) { $e->stopPropagation(); return new SomeResultClass(); });
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдм рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдкрджрдВрдб рдХреЛ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЗ рдХрд╛рд░рдг рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣реИрдВрдбрд▓рд░ рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢
рдЖрдк рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдЬреЛ рд▓реЙрдЧ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░ рдХрд┐рд╕реА рднреА рд╕рдордп рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдХреИрд╢рд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп: рдХреИрд╢ рдореЗрдВ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╣реИрдВрдбрд▓рд░ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛; рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЬреЛ рдХреИрд╢ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдмрд╛рдж рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
EventManager::attach()
рдФрд░
StaticEventManager::attach()
рдореЗрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ
priority
рддрд░реНрдХ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ 1 рд╣реИ), рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреА рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
$priority = 100; $events->attach('Example', 'do', function($e) { $event = $e->getName(); $target = get_class($e->getTarget());
рдореИрдереНрдпреВ рд╡реАрдпрд░ рдУ'рдкрдиреА рдиреЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рд╣реИ, рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдФрд░ рдореИрдВ, рд╢рд╛рдпрдж, рдЙрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд▓рд╛рдирд╛: рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреИрд╢рд┐рдВрдЧ рддрдВрддреНрд░
рдкрд┐рдЫрд▓реЗ рдЦрдВрдбреЛрдВ рдореЗрдВ, рдпрд╣ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЙрдирдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдмрд╛рдзрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХрд╛ рд╣реИред рдЪрд▓рд┐рдП рдЗрд╕рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИред
рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдереНрдпреВ рд╡реАрдпрд░ рдУ'рдкрдиреА рдиреЗ рдЕрдХреНрд╕рд░ рдШрдЯрдирд╛ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ
__FUNCTION__
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдЗрд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдХреНрд░реЛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрди рдирд╛рдореЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬрдм рд╕реЗ рд╕рдВрджрд░реНрдн рдЖрдорддреМрд░ рдкрд░ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдШрдЯрдирд╛)ред рдФрд░ рдРрд╕реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ "do.pre", "do.post", "do.error" рдЖрджрд┐ рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд
$params
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рддрд░реНрдХ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐, рдХреИрд╢ рдореЗрдВ рдИрд╡реЗрдВрдЯ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдП? рдЙрджрд╛рд╣рд░рдг
__RESULT__
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рддрд░рдл рдбрдмрд▓ рдЕрдВрдбрд░рд▓рд╛рдЗрдирд┐рдВрдЧ рдЖрдорддреМрд░ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЖрд░рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИред
рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
public function someExpensiveCall($criteria1, $criteria2) { $params = compact('criteria1', 'criteria1'); $results = $this->events()->triggerUntil(__FUNCTION__ . '.pre', $this, $params, function ($r) { return ($r instanceof SomeResultClass); }); if ($results->stopped()) { return $results->last(); }
рдЕрдм рд╣рдо рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреЛ 'someExpensiveCall.pre' рдФрд░ 'someExpensiveCall.post' рдЬреИрд╕реА рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдбреЗрдЯрд╛ рдХреИрд╢ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдпрд╣ рднреА рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐
$cache
рдЪрд░ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ Zend_Cache рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИред 'SomeExpensiveCall.pre' рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 100 рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ 'someExpensiveCall.post' рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 100 рд╣реИ, рдпрджрд┐ рдХреИрд╢ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
$events->attach('someExpensiveCall.pre', function($e) use ($cache) { $params = $e->getParams(); $key = md5(json_encode($params)); $hit = $cache->load($key); return $hit; }, 100); $events->attach('someExpensiveCall.post', function($e) use ($cache) { $params = $e->getParams(); $result = $params['__RESULT__']; unset($params['__RESULT__']); $key = md5(json_encode($params)); $cache->save($result, $key); }, -100);
рдиреЛрдЯ: рд╣рдо HandlerAggregate
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреНрд▓рд╛рд╕ рдХреА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ $cache
рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмреЗрд╢рдХ, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реА рдХреИрд╢рд┐рдВрдЧ рдореИрдХреЗрдирд┐рдЬреНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдХрд┐рд╕реА рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рдЕрдиреНрдп рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИ (рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢рд┐рдВрдЧ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдХреИрд╢ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдХреИрд╢ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛), рдпрд╛ рдЗрди рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ (рдЬреЛ рд▓реЙрдЧрд┐рдВрдЧ рдореЗрдВ рд▓рдЧреЗ рд╣реЛрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдпрд╛ рдорд╛рдиреНрдпрддрд╛)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдФрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
EventManager
Zend рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА, рдЗрд╕рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдПрдорд╡реАрд╕реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред ZF2 рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рдмрд╛рдж, рдШрдЯрдирд╛ рдореЙрдбрд▓, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ, рдмрд╣реБрдд рдорд╛рдВрдЧ рдореЗрдВ рд╣реЛрдЧрд╛ред
рдмреЗрд╢рдХ, рдХреБрдЫ рдЦреБрд░рджрд░реЗрдкрди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореИрдВ рдЕрдкрдиреЗ рджрдо рдкрд░ рдЬреЛрдбрд╝реВрдВрдЧрд╛ - рдХреЛрдИ рдирдпрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЬрд╝реЗрдВрдбреЗ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ - рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рда рдХреЛ рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓реЗрдЦреЛрдВ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдиреБрднрд╡ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг)ред
рдореЗрд░реА рдЖрд▓реЛрдЪрдирд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рдореВрд▓:
http://weierophinney.net/matthew