我正在将应用程序从Symfony 2.0升级到Symfony 2.1,我跟着this升级文件,所有工作正常,但是在cache:clear
之后我在使用某些存储库时遇到错误。这是错误:
[Semantical Error] The annotation "@ORM\Table" in class
edasiclinic\AlertesBundle\Repository\AlertesRepository was never imported. Did you maybe
forget to add a "use" statement for this annotation?
这是一个例子,我在其他存储库中遇到此错误。我不明白为什么我必须在存储库文件中导入@ORM\Table
如果我不在那里使用注释。
此外,如果我等待~10秒然后刷新浏览器,它就可以工作......
修改
这是实体:
<?php
namespace edasiclinic\DatabaseBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* edasiclinic\DatabaseBundle\Entity\Alertes
*
* @ORM\Table(name="alertes")
* @ORM\Entity(repositoryClass="edasiclinic\AlertesBundle\Repository\AlertesRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Alertes
{
/**
* @var integer $id
*
* @ORM\Id
* @ORM\Column(name="idAlerta", type="integer")
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
...
}
这是存储库类:
<?php
namespace edasiclinic\AlertesBundle\Repository;
use Doctrine\ORM\EntityRepository;
use edasiclinic\DasiBundle\Funcions\AES;
class AlertesRepository extends EntityRepository
{
public function countUnread($user, $idioma, $fus)
{
// ...
}
}
由于
答案 0 :(得分:3)
今天我遇到了同样的问题。在一些谷歌搜索之后,解决方案显然是在Repository类定义之前包含一个注释块。
在你的情况下:
/** * AlertesRepository */ class AlertesRepository extends EntityRepository { ... }
没有该评论块,您将收到有关“@ORM \ Table”的无意义错误。另一个Symfony / Doctrine oddity&gt; _&gt;
答案 1 :(得分:1)
这是5.3.8之前版本中的PHP错误。来自symfony system requirements:
$this->addRecommendation(
version_compare($installedPhpVersion, '5.3.8', '>='),
'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156',
'Install PHP 5.3.8 or newer if your project uses annotations.'
);
如果您无法升级到PHP版本&gt; = 5.3.8,请参阅PHP bug #55156以获取更多详细信息和可能的解决方法。
答案 2 :(得分:0)
您似乎忘了添加use
声明。
<?php
namespace Acme\MyBundle\Entity;
// Remember to include this use statement
use Doctrine\ORM\Mapping as ORM;
/**
* My Entity
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Acme\MyBundle\Entity\MyEntityRepository")
*/
class MyEntity
{
}
答案 3 :(得分:0)
对我来说,它只发生在某些版本的PHP上,解决方案是将Repository类放在实体类文件夹上方的文件夹中