API Annotations

Annotations finden vor allem in den API Klassen Verwendung, beispielsweise um eine Methode zu kennzeichnen sie benötigt eine gültige Session. Verwendet wird hierfür die Annotation Unterstützungen aus Doctrine.

Definition einer Annotationklasse:

namespace Test\Annotation;
class Test extends \Doctrine\Common\Annotations\Annotation
{}

In der Annotationklasse können auch zusätzliche Parameter definiert werden, die bei der Verwendung der Annotation angegeben werden müssen.

Abfrage der Annotations:

namespace Test;
class Module
{
    public function init(\Zend\ModuleManager\ModuleManager $moduleManager)
    {
        $sharedManager = $moduleManager->getEventManager()->getSharedManager();
        $sharedManager->attach('DragonJsonServerApiannotation\Module', 'Request', 
            function (\DragonJsonServerApiannotation\Event\Request $eventRequest) {
                $annotation = $eventRequest->getAnnotation();
                if (!$annotation instanceof \Test\Annotation\Test) {
                    return;
                }
                //Reaktion auf die Annotation
            }
    	);
    	$sharedManager->attach('DragonJsonServerApiannotation\Module', 'Servicemap', 
            function (\DragonJsonServerApiannotation\Event\Servicemap $eventServicemap) {
                $annotation = $eventServicemap->getAnnotation();
                if (!$annotation instanceof \Test\Annotation\Test) {
                    return;
                }
                //Reaktion auf die Annotation
            }
        );
    }
}

Die Abfrage ist mit zwei Events möglich: Bei jedem Request um beispielsweise zum Prüfen der Session und bei der Auslieferung der Servicemap um der SMD die Information hinzuzufügen dass für jede Methode die diese Annotation besitzt zusätzliche Parameter im Request erforderlich sind.

Verwendung der Annotation in einer API Klasse:

namespace Test\Api;
class Test
{
    /**
     * @Test\Annotation\Test
     */
    public function test() {
    }
}