Symfony2 — невозможно загрузить аннотации сериализатора JMS

У нас проблемы с автозагрузкой аннотаций JMSSerializer в приложении Symfony. Мы получаем:

[Semantical Error] The annotation "@JMS\Serializer\Annotation\XMLRoot" in class Class\Namespace\ClassName does not exist, or could not be auto-loaded.

Мы используем стандартный автозагрузчик symfony / composer, имеем "jms/serializer-bundle": "~1.0" требуется в composer.json и включает пакет в AppKernel. Другие аннотации (например, аннотации маршрута Symfony) работают правильно.

Мы попытались принудительно загрузить аннотации сериализатора jms, изменив app_dev.php так:

<?php

use Doctrine\Common\Annotations\AnnotationRegistry;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Debug\Debug;

// If you don't want to setup permissions the proper way, just uncomment the following PHP line
// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
//umask(0000);

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
Debug::enable();

require_once __DIR__.'/../app/AppKernel.php';

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

AnnotationRegistry::registerFile("/srv/httpd/project/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlRoot.php");
AnnotationRegistry::registerAutoloadNamespace('JMS\Serializer', "/srv/httpd/project/vendor/jms/serializer/src/");

$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

Мы попробовали несколько вариантов AnnotationRegistery::... звонки. AnnotationRegistry::registerFile("/srv/httpd/project/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlRoot.php"); кажется, правильно регистрирует аннотации XmlRoot, но другие аннотации JMS по-прежнему не работают.

Благодарю.

1

Решение

Вы должны отредактировать файл vendor / autoload.php, как показано ниже:

// autoload.php @generated by Composer
use Doctrine\Common\Annotations\AnnotationRegistry;

require_once __DIR__ . '/composer/autoload_real.php';

$loader = ComposerAutoloaderInitb6ddad78dfb081b4ad47d02feb034c25::getLoader();
AnnotationRegistry::registerLoader([$loader, 'loadClass']);

return $loader;
1

Другие решения

Попробуйте импортировать пространство имен на Ваш Entity с псевдонимом:

<?php

use JMS\Serializer\Annotation as JMS

class SomeClass
{
/**
* @JMS/XMLRoot
*/
public $someProperty
}

У меня такая же проблема с Doctrine в другом месте.

0

Другая возможная причина той же ошибки: —

[Semantical Error] The annotation "@JMS\Serializer\Annotation\XMLRoot" in
class Class\Namespace\ClassName does not exist, or could not be auto-loaded.

пропущенный вызов AnnotationRegistry::registerLoader,

0
По вопросам рекламы [email protected]