我有一个symfony2应用程序,在我的本地电脑上使用ubuntu并且运行良好,但在使用CentOS和Cpanel的服务器不起作用时,我收到了这个错误:
类“Propa \ PageBundle \ Entity \ Page”不是有效实体或已映射 超级。
CRITICAL - Doctrine \ ORM \ Mapping \ MappingException:Class “Propa \ PageBundle \ Entity \ Page”不是有效实体或映射超级 类。 (未被捕的例外)在 /home/estudi83/domains/serverprova.com.es/propa/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php 第216行
我证明:
$page=$em->getRepository('PropaPageBundle:Page')->findOneBy(array('codi'=>'0001'));
并获得此错误:Unknown Entity namespace alias 'PropaPageBundle'.
我证明了:
$page=$em->getRepository('Propa\PageBundle\Entity\Page')->findOneBy(array('codi'=>'0001'));
并获得相同的错误:Class "Propa\PageBundle\Entity\Page" is not a valid entity or mapped super class.
这是实体:
<?php
namespace Propa\PageBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Propa\PageBundle\Util;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* @ORM\Entity(repositoryClass="Propa\PageBundle\Repository\PageRepository")
* @Gedmo\TranslationEntity(class="Propa\PageBundle\Entity\Translation\PageTranslation")
* @ORM\HasLifecycleCallbacks
* @Vich\Uploadable
*/
class Page {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
我证明了:
auto_mapping: true
和
auto_mapping: false
mappings:
PageBundle: ~
但总是会得到同样的错误。
我该怎么办?
更新:解决了eAccelerator中带有symfony2注释的问题,我卸载了eAccelerator并安装了APC并且工作正常!!
答案 0 :(得分:2)
最后,它可能是缓存优化器问题。如果您使用的是eAccelerator,那么您可能会遇到问题,可能是使用了Doctrine。原因是eAccelerator从代码中删除了注释!您可以尝试APC,它与学说表现良好。
阅读apc vs eaccelerator vs xcache
看看
http://you.site.name/config.php
它向您展示了使您的应用程序有效的要求。
和
请公开您的页面实体类。
此错误可能有很多原因,您的问题已在SO "Class XXX is not a valid entity or mapped super class" after moving the class in the filesystem
上提出https://github.com/symfony/symfony/issues/4554
$page=$em->getRepository('PageBundle:Page')->findOneBy(array('codi'=>'0001'));
将其更改为
$page=$em->getRepository('PropaPageBundle:Page')->findOneBy(array('codi'=>'0001'));
或
$page=$em->getRepository('Propa\PageBundle\Entity\Page')->findOneBy(array('codi'=>'0001'));
看看它是否有效。