1

symfony アプリで JMSSerializer アノテーションを自動ロードする際に問題が発生しています。私たちは得ています: [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 ルートアノテーションなど) は正しく機能します。

app_dev.php を次のように変更して、jms シリアライザー アノテーションを強制的にロードしようとしました。

<?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 アノテーションはまだ失敗しています。

ありがとう。

4

4 に答える 4