6

\Doctrine\Common\Annotations\AnnotationRegistry::registerFileエンティティファイルの注釈レジストリにアクセスするために使用する必要があります。

この部分は、ドライバーチェーンを使用し、orm:schema-tool:creatorを使用するために必要です。しかし、を追加して必要な各クラスを追加することはできませんAnnotationRegistry::registerFile

この問題は、Doctrine2.2.2にGedmoを追加したいときに発生しました。

// cli-config.php
// if comment this like an error will appear 
// \Doctrine\Common\Annotations\AnnotationRegistry::registerFile(__DIR__ . '/../library/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');

// cache
$cache = new \Doctrine\Common\Cache\ArrayCache();

// annotation reader
$annotationReader = new \Doctrine\Common\Annotations\AnnotationReader();

// cached annotation reader
$cachedAnnotationReader = new \Doctrine\Common\Annotations\CachedReader($annotationReader, $cache);

// driver chain
$driverChain = new \Doctrine\ORM\Mapping\Driver\DriverChain();

// annotation driver
$annotationDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($cachedAnnotationReader, array(SCHEMA_PATH));

// add entity namespaces
$driverChain->addDriver($annotationDriver, 'Entity');

// configuration
$config = new \Doctrine\ORM\Configuration();
$config->setMetadataCacheImpl($cache);
$config->setMetadataDriverImpl($driverChain);
$config->setQueryCacheImpl($cache);
$config->setProxyDir(PROXY_PATH);
$config->setProxyNamespace('Proxies');
$config->setAutoGenerateProxyClasses(true);

// entity manager
$entityManager = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);

// helper set
$helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
            'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($entityManager->getConnection()),
            'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($entityManager)
        ));

// return
return $helperSet;

そして私のエンティティファイルはここにあります

namespace Entity;

use \Doctrine\Common\Collections\ArrayCollection;
use \Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User
{
    /**
     * @ORM\Id
     * @ORM\Column(columnDefinition="INT unsigned NOT NULL")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string",length=32)
     */
    protected $name;

    public function getId()
    {
        return $this->id;
    }

    public function setId($id)
    {
        $this->_id = $id;
        return $this;
    }

    public function getName()
    {
        return $this->id;
    }

    public function setName($name)
    {
        $this->_id = $name;
        return $this;
    }
}

エラーは:

  [Doctrine\Common\Annotations\AnnotationException]                                                                                       
  [Semantical Error] The annotation "@\Doctrine\ORM\Mapping\Entity" in class Entity\User does not exist, or could not be auto-loaded.
4

2 に答える 2

9

AnnotationRegistry設定されていないようです。

スクリプトに以下を追加します。

use Doctrine\Common\Annotations\AnnotationRegistry;  

AnnotationRegistry::registerFile("/path/to/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php");

詳細な説明については、注釈に関するDoctrineのマニュアルを参照してください。
つまり、注釈PSR-0とspl autoloadingが機能しないことを読み取るには、それらのソリューションを使用する必要があります。

于 2012-05-20T22:32:45.233 に答える
-2

サミュエル・ヘルツォーク、ありがとう。それは私にとって完璧に機能します。私はcomposer.jsonを使用してベンダーを生成していました。したがって、autoload.phpを追加したときは、これらの文を追加する必要がありました...

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

require_once dirname( __DIR__ ).'/vendor/composer/autoload_real.php';

$loader = ComposerAutoloaderInit0cf45a42473ebbcd4516460f93747271::getLoader();

AnnotationRegistry::registerFile( dirname( __DIR__ ).'/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php' );

return $loader;

ちょうどそのように。

于 2013-02-06T03:19:14.933 に答える