Amiro.CMS API Reference
Amiro.Ru / Manual
Loading search...

Usage example

  • <?php
  • /**
  •  * Events usage example.
  •  *
  •  * This script must be located at site root.
  •  * It will output:
  •  * <pre>
  •  * ---
  •  * firing 'event' for first...
  •  * ExampleModule1::handler()
  •  * ---
  •  * firing 'event' for second...
  •  * ExampleModule2::handler()
  •  * ---
  •  * firing 'event' for third...
  •  * ExampleModule3::handler()
  •  * ---
  •  * firing 'event' using AMI_Event::MOD_ANY...
  •  * ---
  •  * ExampleModule1::commonHandler()
  •  * ExampleModule2::commonHandler(), following handling is interrupted
  •  * ---
  •  * dropping $oModule2 handler and firing 'common_event' using AMI_Event::MOD_ANY...
  •  * ExampleModule1::commonHandler()
  •  * ExampleModule3::commonHandler()
  •  * ---
  •  * $aEvent['count'] = 7
  •  * </pre>
  •  *
  •  * @copyright Amiro.CMS.
  •  * @category  Example
  •  * @package   AMI_Event
  •  * @since     5.10.0
  •  */
  •  
  • require 'ami_env.php';
  •  
  • /**
  •  * @var AMI_Response 
  •  */
  • $oResponse AMI::getSingleton('response');
  • $oResponse->start();
  •  
  • abstract class ExampleModule{
  •     protected $modId '';
  •  
  •     public function __construct(){
  •         AMI_Event::addHandler('event'array($this'handler')$this->modId);
  •         AMI_Event::addHandler('common_event'array($this'commonHandler')AMI_Event::MOD_ANY);
  •     }
  •  
  •     public function handler($namearray $aEvent$handlerModId$srcModId){
  •         AMI::getSingleton('response')->write(get_class($this"::handler()<br />");
  •         $aEvent['count']++;
  •         return $aEvent;
  •     }
  •  
  •     public function commonHandler($namearray $aEvent$handlerModId$srcModId){
  •         AMI::getSingleton('response')->write(get_class($this"::commonHandler()<br />");
  •         $aEvent['count']++;
  •         return $aEvent;
  •     
  • }
  •  
  • class ExampleModule1 extends ExampleModule{
  •     protected $modId 'first';
  • }
  •  
  • class ExampleModule2 extends ExampleModule{
  •     protected $modId 'second';
  •  
  •     public function commonHandler($namearray $aEvent$handlerModId$srcModId){
  •         AMI::getSingleton('response')->write(
  •             get_class($this"::commonHandler(), following handling is interrupted<br />"
  •         );
  •         $aEvent['_break_event'true;
  •         $aEvent['count']++;
  •         return $aEvent;
  •     }
  • }
  •  
  • class ExampleModule3 extends ExampleModule{
  •     protected $modId 'third';
  • }
  •  
  • $oModule1 new ExampleModule1;
  • $oModule2 new ExampleModule2;
  • $oModule3 new ExampleModule3;
  •  
  • $aEvent array('count' => 0);
  • $oResponse->write("<hr />firing 'event' for first...<br />");
  • AMI_Event::fire('event'$aEvent'first');
  •  
  • $oResponse->write("<hr />firing 'event' for second...<br />");
  • AMI_Event::fire('event'$aEvent'second');
  •  
  • $oResponse->write("<hr />firing 'event' for third...<br />");
  • AMI_Event::fire('event'$aEvent'third');
  •  
  • $oResponse->write("<hr />firing 'event' using AMI_Event::MOD_ANY...<br />");
  • AMI_Event::fire('event'$aEventAMI_Event::MOD_ANY);
  •  
  • $oResponse->write("<hr />firing 'common_event' using AMI_Event::MOD_ANY...<br />");
  • AMI_Event::fire('common_event'$aEventAMI_Event::MOD_ANY);
  •  
  • $oResponse->write("<hr />dropping \$oModule2 handler and firing 'common_event' using AMI_Event::MOD_ANY...<br />");
  • AMI_Event::dropHandler(''$oModule2nulltrue);
  • AMI_Event::fire('common_event'$aEventAMI_Event::MOD_ANY);
  •  
  • $oResponse->write('<hr />$aEvent[\'count\'] = ' $aEvent['count']);
  •  
  • $oResponse->send();