mirror of
https://github.com/torrentpier/torrentpier-lts.git
synced 2025-02-28 15:10:54 +03:00
110 lines
2.9 KiB
PHP
110 lines
2.9 KiB
PHP
<?php
|
|
/**
|
|
* Zend Framework (http://framework.zend.com/)
|
|
*
|
|
* @link http://github.com/zendframework/zf2 for the canonical source repository
|
|
* @copyright Copyright (c) 2005-2015 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 string[] $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);
|
|
}
|
|
}
|