Source of file AnnotationManager.php
Size: 2,979 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Code/Annotation/AnnotationManager.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Code\Annotation; use Zend\Code\Annotation\Parser\ParserInterface; use Zend\EventManager\Event; use Zend\EventManager\EventManager; use Zend\EventManager\EventManagerAwareInterface; use Zend\EventManager\EventManagerInterface; /** * Pluggable annotation manager * * Simply composes an EventManager. When createAnnotation() is called, it fires * off an event of the same name, passing it the resolved annotation class, the * annotation content, and the raw annotation string; the first listener to * return an object will halt execution of the event, and that object will be * returned as the annotation. */ class AnnotationManager implements EventManagerAwareInterface { const EVENT_CREATE_ANNOTATION = 'createAnnotation'; /** * @var EventManagerInterface */ protected $events; /** * Set the event manager instance * * @param EventManagerInterface $events * @return AnnotationManager */ public function setEventManager(EventManagerInterface $events) { $events->setIdentifiers(array( __CLASS__, get_class($this), )); $this->events = $events; return $this; } /** * Retrieve event manager * * Lazy loads an instance if none registered. * * @return EventManagerInterface */ public function getEventManager() { if (null === $this->events) { $this->setEventManager(new EventManager()); } return $this->events; } /** * Attach a parser to listen to the createAnnotation event * * @param ParserInterface $parser * @return AnnotationManager */ public function attach(ParserInterface $parser) { $this->getEventManager() ->attach(self::EVENT_CREATE_ANNOTATION, array($parser, 'onCreateAnnotation')); return $this; } /** * Create Annotation * * @param array $annotationData * @return false|\stdClass */ public function createAnnotation(array $annotationData) { $event = new Event(); $event->setName(self::EVENT_CREATE_ANNOTATION); $event->setTarget($this); $event->setParams(array( 'class' => $annotationData[0], 'content' => $annotationData[1], 'raw' => $annotationData[2], )); $eventManager = $this->getEventManager(); $results = $eventManager->trigger($event, function ($r) { return (is_object($r)); }); $annotation = $results->last(); return (is_object($annotation) ? $annotation : false); } } |