Sto tentando di utilizzare JMSSerializer come libreria autonoma per mappare le risposte JSON da un'API alle mie classi modello e sto riscontrando alcuni problemi.JMSSerializer stand alone - L'annotazione non esiste o non può essere caricata automaticamente
esecuzione il codice seguente genera un'eccezione:
<?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);
?>
Ecco l'eccezione
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.
ho le seguenti librerie installate per il progetto tramite compositore
{
"require": {
"jms/serializer": "1.0.*@dev"
}
}
Is c'è qualcosa di ovvio che mi manca perché non sto usando tutti i soluti di Doctrine 2 sopra?
EDIT: la mia soluzione finale era quello di creare un file di bootstrap con il seguente contenuto:
<?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'
);
?>
Grazie a @SirArturio, ho finito per capirlo ma ho dimenticato di aggiornare questa domanda! –
Come hai risolto? – messified
Da me solo la registrazione del file ha funzionato. Lo spazio dei nomi in qualche modo non ... – inf3rno