Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JMSSerializer stand alone - Annotation does not exist, or cannot be auto-loaded

I am attempting to use JMSSerializer as a stand alone library to map JSON responses from an API to my model classes and am running into some issues.

Executing the following code results in an exception:

<?php require dirname(__DIR__) . '/vendor/autoload.php';  use JMS\Serializer\Annotation AS JMS;  class Trii {     /**      * User ID for this session      * @JMS\SerializedName("userID")      * @JMS\Annotation(getter="getUserId")      * @JMS\Type("string")      * @var string      */     private $userId;      public function getUserId() {         return $this->userId;     }      public function setUserId($userId) {         $this->userId = $userId;     } }  $serializer = \JMS\Serializer\SerializerBuilder::create()->setDebug(true)->build(); $object = $serializer->deserialize('{"userID":"Trii"}', 'Trii', 'json'); var_dump($object); ?> 

Here is the exception

Doctrine\Common\Annotations\AnnotationException: [Semantical Error] The annotation "@JMS\Serializer\Annotation\SerializedName" in property Trii::$userId does not exist, or could not be auto-loaded. 

I have the following libraries installed for the project via composer

{     "require": {         "jms/serializer": "1.0.*@dev"     } } 

Is there something obvious I am missing since I am not using the whole Doctrine 2 solution?

EDIT: my final solution was to create a bootstrap file with the following content:

<?php // standard composer install vendor autoload magic require dirname(__DIR__) . '/vendor/autoload.php';  // Bootstrap the JMS custom annotations for Object to Json mapping \Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace(     'JMS\Serializer\Annotation',     dirname(__DIR__).'/vendor/jms/serializer/src' ); ?> 
like image 902
Josh J Avatar asked Jan 31 '13 15:01

Josh J


1 Answers

Pretty sure this enables silent auto-loading which is much more convenient than registering the namespaces yourself.

AnnotationRegistry::registerLoader('class_exists'); 
like image 103
Flip Avatar answered Sep 17 '22 15:09

Flip