tft*_*ftd 3 php doctrine doctrine-orm opcache
我和Doctrine有一个非常奇怪的问题PHP 5.5.6 Opcache.opcache关闭模块后,一切正常.一旦我打开它,我开始得到以下异常:
Fatal error: Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Class "Admin\Models\Users\Role" is not a valid entity or mapped super class.' in vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php on line 336
( ! ) Doctrine\ORM\Mapping\MappingException: Class "Admin\Models\Users\Role" is not a valid entity or mapped super class. in vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php on line 336
Call Stack
# Time Memory Function Location
1 0.0000 128016 {main}( ) ../app.php:0
2 0.0185 615020 Core\Bootstrap->handle( ) ../app.php:53
3 0.0210 695744 call_user_func_array ( ) ../Bootstrap.php:111
4 0.0210 695976 Admin\Controllers\DashboardController->indexAction( ) ../Bootstrap.php:111
5 0.0210 696028 Doctrine\ORM\EntityManager->getRepository( ) ../DashboardController.php:25
6 0.0210 696072 Doctrine\ORM\Repository\DefaultRepositoryFactory->getRepository( ) ../EntityManager.php:759
7 0.0210 696176 Doctrine\ORM\Repository\DefaultRepositoryFactory->createRepository( ) ../DefaultRepositoryFactory.php:50
8 0.0210 696200 Doctrine\ORM\EntityManager->getClassMetadata( ) ../DefaultRepositoryFactory.php:67
9 0.0210 696420 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor( ) ../EntityManager.php:295
10 0.0213 699628 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata( ) ../AbstractClassMetadataFactory.php:211
11 0.0224 781128 Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata( ) ../AbstractClassMetadataFactory.php:318
12 0.0224 782824 Doctrine\ORM\Mapping\Driver\AnnotationDriver->loadMetadataForClass( ) ../ClassMetadataFactory.php:117
Run Code Online (Sandbox Code Playgroud)
我相信我的实体被正确定义 - 正如我在开始时提到的,一旦我禁用opcache,一切都按预期工作.要初始化Doctrine,我正在使用这段代码:
// $this->getEntityPaths() returns an array of existing absolute paths, each of which is checked with realpath().
// $this->getProxyPath() returns a string with the absolute path, checked with realpath()
// $this->getInDevelopment() returns boolean and is set to TRUE
$config = Setup::createAnnotationMetadataConfiguration($this->getEntityPaths(), $this->getInDevelopment(), $this->getProxyPath());
$config->setAutoGenerateProxyClasses(true);
$dbParams = array(
'driver' => 'pdo_pgsql',
'host' => $this->getHost(),
'port' => $this->getPort(),
'user' => $this->getUser(),
'password' => $this->getPass(),
'dbname' => $this->getName()
);
$this->db = EntityManager::create($dbParams, $config);
Run Code Online (Sandbox Code Playgroud)
我也试过这个配置:
$config = new Configuration;
$config->setProxyDir($this->getProxyPath());
$config->setProxyNamespace('DoctrineProxies');
$config->setAutoGenerateProxyClasses(true);
$driverImpl = $config->newDefaultAnnotationDriver($this->getEntityPaths());
$config->setMetadataDriverImpl($driverImpl);
$config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ArrayCache());
$config->setQueryCacheImpl(new \Doctrine\Common\Cache\ArrayCache());
// the connection configuration
$dbParams = array(
'driver' => 'pdo_pgsql',
'host' => $this->host,
'port' => $this->port,
'user' => $this->user,
'password' => $this->pass,
'dbname' => $this->name
);
$this->db = EntityManager::create($dbParams, $config);
Run Code Online (Sandbox Code Playgroud)
这是实体
/**
* Roles
*
* @Table(name="roles")
* @Entity
*/
class Role
{
/**
* @Id
* @Column(name="role_id", type="integer", nullable=false)
* @GeneratedValue(strategy="IDENTITY")
*/
private $role_id;
/**
* @Column(name="name", type="string", length=100, nullable=false)
*/
private $name;
}
Run Code Online (Sandbox Code Playgroud)
为了简单起见,我有AutoGenerateProxyClasses,但只是为了确保我也通过生成代理测试它.不幸的是我得到了同样的例外.我不确定如何解决这个问题,究竟是什么问题.这是一个学说错误吗?为什么OpCache打开导致Doctrine异常并将其关闭可以正常工作?我是否遗漏了配置部分或实体中的内容?
经过大量的调试后,我终于理解了为什么Doctrine无法正常使用OpCache.显然,默认情况下,opcache不会存储或加载您在php文件中的任何注释.可以想象,这会在依赖于Annotations的任何php库中产生大量无法解释的异常.所以,只需转到你的php.ini,改变下面的行,你将会像新的一样好.我想这也应该进入Doctrine的帮助.
opcache.save_comments=1
opcache.load_comments=1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3205 次 |
| 最近记录: |