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' ); ?>
Pretty sure this enables silent auto-loading which is much more convenient than registering the namespaces yourself.
AnnotationRegistry::registerLoader('class_exists');
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With