Php 实体抽象属性已复制到扩展实体
我有一个非常奇怪的错误:Php 实体抽象属性已复制到扩展实体,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我有一个非常奇怪的错误: Fatal error: Access level to Acme\DemoBundle\Entity\Book::$title must be public (as in class Acme\DemoBundle\Entity\AbstractBook) in /var/www/html/src/Acme/DemoBundle/Entity/Book.php on line 614 Call Stack: 0.0002 674960 1 第614行不可用,
Fatal error: Access level to Acme\DemoBundle\Entity\Book::$title
must be public (as in class Acme\DemoBundle\Entity\AbstractBook) in
/var/www/html/src/Acme/DemoBundle/Entity/Book.php on line 614 Call
Stack: 0.0002 674960 1
第614行不可用,最疯狂的是,当我手动将整个实体文件夹从ide上传到本地ubunutu图像时,错误消失了
这是我的AbstractBookEntity:
namespace Acme\DemoBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\MappedSuperclass
* @ORM\HasLifecycleCallbacks
*/
class AbstractBook
{
/**
* @var string $title
*
* @ORM\Column(name="title", type="string", length=45, nullable=true)
*/
public $title;
图书类:
namespace Acme\DemoBundle\Entity;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
/**
* Acme\DemoBundle\Entity\Book
*
* @ORM\Table(name="book")
* @ORM\Entity(repositoryClass="Acme\DemoBundle\Repository\BookRepository")
*/
class Book extends AbstractBook {
更新:
我检测到抽象实体中的属性被复制并声明为私有,但它是如何发生的?首先,尝试清除缓存:
php应用程序/控制台缓存:清除
,或者如果失败:rm-Rf app/cache/*
我建议将您的实体变量声明为受保护(不确定,但我的意思是我听说过使用public时出现问题)
然后您可以运行
php应用程序/控制台原则:generate:entities AcmeDemoBundle
来创建getter/setter。Book类的完整代码是什么?这可能是缓存错误。你清除缓存了吗?@Ocramius:这是我的图书类:还有很多其他属性,但是链接总是一样的,我想与这个错误没有任何联系。@Patt我清除了缓存太多次了,你试着在一个绝缘的环境中复制这个吗?你是不是碰巧得到了apc.stat=0?是的,我做了所有的事情,我认为条令:生成是个问题。但是我不明白为什么属性必须作为私有从抽象复制到扩展实体。我会像你说的那样尝试两次。好吧,我从来没有运行过generate:entities allone,现在我有了原因。但我不明白为什么doctrine会这样做?因此,我看不到其他解决方案可以将属性从mappedsuperclass复制到扩展实体并删除抽象实体。谢谢我不确定我是否理解你的问题。但您不必为实体定义抽象类。你也可以只定义你的类书,这应该足够了。不,我有两个实体,它们的属性基本相同,但我想要两个不同的数据库表。所以我认为最好的解决方案是创建一个抽象实体,将其用于两个实体。当我调用php app/console generate:entites时,抽象实体中的属性被复制到扩展实体中,我不明白为什么。我可以移除它们,然后一切都会好起来。但这不是一个解决办法。