コード例 #1
0
ファイル: Connector.php プロジェクト: minwork/minwork
 /**
  * Connect events to dispatcher
  * @param EventDispatcherInterface $dispatcher            
  * @param object|array $connector
  *            <br><u>Available formats</u>:<br>
  *            Associative array: event to methods
  *            <p><pre>[{event_name} => {method_name}, ...]</pre></p>
  *            List of events
  *            <p><pre>[{event_name1}, {event_name2}, ...]</pre></p>
  *            Object with constants containing 'event' keyword
  *            <p>Search list of class constants and matches any name or value that contains 'event' keyword<br>
  *            If value is matched it will be trimmed from 'event' keyword otherwise raw value is used</p>
  *            
  * @return self
  */
 protected function connect(EventDispatcherInterface $eventDispatcher, $connector) : self
 {
     $methods = get_class_methods($this);
     $methodsMap = [];
     $mapper = [];
     $normalizedEventName = function ($event) {
         $eventName = strtr($event, '_', '');
         if (($pos = mb_stripos($eventName, 'event')) !== false) {
             $event = mb_substr($eventName, $pos + 5);
         }
         return mb_strtolower($event);
     };
     foreach ($methods as $method) {
         $methodsMap[$method] = mb_strtolower($method);
     }
     if (is_object($connector) || is_string($connector)) {
         $reflection = new \ReflectionClass($connector);
         $constants = $reflection->getConstants();
         foreach ($constants as $const => $event) {
             if (($method = array_search($normalizedEventName($event), $methodsMap)) !== false || ($method = array_search($normalizedEventName($const), $methodsMap)) !== false) {
                 $mapper[$event][] = $method;
             }
         }
     } elseif (is_array($connector)) {
         if (ArrayHelper::isAssoc($connector)) {
             foreach ($connector as $event => $method) {
                 $mapper[$event] = ArrayHelper::forceArray($method);
             }
         } else {
             foreach ($connector as $event) {
                 if (($method = array_search($normalizedEventName($event), $methodsMap)) !== false) {
                     $mapper[$event][] = $method;
                 }
             }
         }
     }
     foreach ($mapper as $eventName => $methods) {
         foreach ($methods as $method) {
             $eventDispatcher->addListener($eventName, [$this, $method]);
         }
     }
     return $this;
 }
コード例 #2
0
ファイル: Table.php プロジェクト: minwork/minwork
 /**
  * Prepare columns query part<br>
  * If columns are associative array then they should be in form of: [{column_name} => {column_alias}, ...]
  * @param array|string $columns
  */
 protected function prepareColumnsList($columns)
 {
     if (is_array($columns)) {
         if (ArrayHelper::isAssoc($columns)) {
             array_walk($columns, function (&$v, $k) {
                 $v = "{$this->getDatabase()->escapeColumnName($k)} as {$v}";
             });
             return implode(', ', $columns);
         } else {
             return implode(', ', array_map([$this->getDatabase(), 'escapeColumnName'], $columns));
         }
     }
     return $columns;
 }