Symfony2 找不到映射文件

Posted

技术标签:

【中文标题】Symfony2 找不到映射文件【英文标题】:Symfony2 No mapping file found 【发布时间】:2013-09-18 12:03:00 【问题描述】:

我正在使用 symfony2 并收到此错误:

找不到名为“Acme.BlogBu​​ndle.Entity.Posts.php”的映射文件 类'Acme\BlogBu​​ndle\Entity\Posts'。 500内部服务器错误 - 映射异常

我生成Entity php app/console dictionary:generate:entity

实体名称:AcmeBlogBu​​ndle:Post

格式:php

我放在 Acme:BlogBu​​ndle:Entity 目录中的所有内容。

这是我的带有 getter 和 setter 方法的 Entity Post 类:

<?php

namespace Acme\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Posts
 */
class Posts

    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $title;

    /**
     * @var string
     */
    private $shortText;

    /**
     * @var string
     */
    private $longText;

    /**
     * @var string
     */
    private $author;

    /**
     * @var \DateTime
     */
    private $dateCreated;

    /**
     * @var \DateTime
     */
    private $dateModified;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    
        return $this->id;
    

    /**
     * Set title
     *
     * @param string $title
     * @return Posts
     */
    public function setTitle($title)
    
        $this->title = $title;

        return $this;
    

    /**
     * Get title
     *
     * @return string 
     */
    public function getTitle()
    
        return $this->title;
    

    /**
     * Set shortText
     *
     * @param string $shortText
     * @return Posts
     */
    public function setShortText($shortText)
    
        $this->shortText = $shortText;

        return $this;
    

    /**
     * Get shortText
     *
     * @return string 
     */
    public function getShortText()
    
        return $this->shortText;
    

    /**
     * Set longText
     *
     * @param string $longText
     * @return Posts
     */
    public function setLongText($longText)
    
        $this->longText = $longText;

        return $this;
    

    /**
     * Get longText
     *
     * @return string 
     */
    public function getLongText()
    
        return $this->longText;
    

    /**
     * Set author
     *
     * @param string $author
     * @return Posts
     */
    public function setAuthor($author)
    
        $this->author = $author;

        return $this;
    

    /**
     * Get author
     *
     * @return string 
     */
    public function getAuthor()
    
        return $this->author;
    

    /**
     * Set dateCreated
     *
     * @param \DateTime $dateCreated
     * @return Posts
     */
    public function setDateCreated($dateCreated)
    
        $this->dateCreated = $dateCreated;

        return $this;
    

    /**
     * Get dateCreated
     *
     * @return \DateTime 
     */
    public function getDateCreated()
    
        return $this->dateCreated;
    

    /**
     * Set dateModified
     *
     * @param \DateTime $dateModified
     * @return Posts
     */
    public function setDateModified($dateModified)
    
        $this->dateModified = $dateModified;

        return $this;
    

    /**
     * Get dateModified
     *
     * @return \DateTime 
     */
    public function getDateModified()
    
        return $this->dateModified;
    

在我的控制器中,我首先在定义控制器的命名空间之后设置 Post Entity。

use Acme\BlogBundle\Entity\Posts;

之后我创建方法

    public function AddAction()
     

        // $post = Acme\BlogBundle\Entity\Posts()

         $posts = new Posts();
         $posts->setTitle('Test Title');

         $em = $this->getDoctrine()->getManager();
         $em->persist($posts);
         $em->flush();

这是堆栈跟踪输出

[1] Doctrine\Common\Persistence\Mapping\MappingException: 没有映射 为类找到名为“Acme.BlogBu​​ndle.Entity.Posts.php”的文件 'Acme\BlogBu​​ndle\Entity\Posts'。 在不适用 在 /var/www/html/Symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php 第 74 行

在 Doctrine\Common\Persistence\Mapping\MappingException::mappingFileNotFound('Acme\BlogBu​​ndle\Entity\Posts', 'Acme.BlogBu​​ndle.Entity.Posts.php') 在 /var/www/html/Symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/DefaultFileLocator.php 第 117 行

在 Doctrine\Common\Persistence\Mapping\Driver\DefaultFileLocator->findMappingFile('Acme\BlogBu​​ndle\Entity\Posts') 在 /var/www/html/Symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/PHPDriver.php 第 59 行

在 Doctrine\Common\Persistence\Mapping\Driver\PHPDriver->loadMetadataForClass('Acme\BlogBu​​ndle\Entity\Posts', 对象(类元数据)) 在 /var/www/html/Symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php 第 104 行

在 Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain->loadMetadataForClass('Acme\BlogBu​​ndle\Entity\Posts', 对象(类元数据)) 在 /var/www/html/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php 第 113 行

at Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata(object(ClassMetadata),

空,假,数组()) 在 /var/www/html/Symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php 第 302 行

at Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata('Acme\BlogBundle\Entity\Posts')
    in /var/www/html/Symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php

第 205 行

在 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor('Acme\BlogBu​​ndle\Entity\Posts') 在 /var/www/html/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php 第 268 行

在 Doctrine\ORM\EntityManager->getClassMetadata('Acme\BlogBu​​ndle\Entity\Posts') 在 /var/www/html/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php 第 1580 行

在 Doctrine\ORM\UnitOfWork->doPersist(object(Posts), array('000000000d824498000000009cdc8511' => object(Posts))) 在 /var/www/html/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php 第 1555 行

在 Doctrine\ORM\UnitOfWork->persist(object(Posts)) 在 /var/www/html/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php 第 565 行

在 Doctrine\ORM\EntityManager->persist(object(Posts)) 在 /var/www/html/Symfony/src/Acme/BlogBu​​ndle/Controller/DefaultController.php 第 23 行

在 Acme\BlogBu​​ndle\Controller\DefaultController->indexAction() 排队

在 call_user_func_array(array(object(DefaultController), 'indexAction'), array()) 在 /var/www/html/Symfony/app/bootstrap.php.cache 第 2815 行

在 Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), '1') 在 /var/www/html/Symfony/app/bootstrap.php.cache 第 2789 行

在 Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), '1', 真的) 在 /var/www/html/Symfony/app/bootstrap.php.cache 第 2918 行

在 Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle(object(Request), '1',真) 在 /var/www/html/Symfony/app/bootstrap.php.cache 第 2220 行

在 Symfony\Component\HttpKernel\Kernel->handle(object(Request)) 在 /var/www/html/Symfony/web/app_dev.php 第 28 行

更新:

新实体测试:

<?php
// src/Acme/BlogBundle/Entity/Test.php
namespace Acme\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table()
 * @ORM\Entity
 */
class Test

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    /**
     * @var string
     *
     * @ORM\Column(name="short_text", type="string", length=255)
     */
    private $shortText;

    /**
     * @var string
     *
     * @ORM\Column(name="long_text", type="text")
     */
    private $longText;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date_created", type="datetime")
     */
    private $dateCreated;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    
        return $this->id;
    

    /**
     * Set title
     *
     * @param string $title
     * @return Test
     */
    public function setTitle($title)
    
        $this->title = $title;

        return $this;
    

    /**
     * Get title
     *
     * @return string 
     */
    public function getTitle()
    
        return $this->title;
    

    /**
     * Set shortText
     *
     * @param string $shortText
     * @return Test
     */
    public function setShortText($shortText)
    
        $this->shortText = $shortText;

        return $this;
    

    /**
     * Get shortText
     *
     * @return string 
     */
    public function getShortText()
    
        return $this->shortText;
    

    /**
     * Set longText
     *
     * @param string $longText
     * @return Test
     */
    public function setLongText($longText)
    
        $this->longText = $longText;

        return $this;
    

    /**
     * Get longText
     *
     * @return string 
     */
    public function getLongText()
    
        return $this->longText;
    

    /**
     * Set dateCreated
     *
     * @param \DateTime $dateCreated
     * @return Test
     */
    public function setDateCreated($dateCreated)
    
        $this->dateCreated = $dateCreated;

        return $this;
    

    /**
     * Get dateCreated
     *
     * @return \DateTime 
     */
    public function getDateCreated()
    
        return $this->dateCreated;
    

又是一些错误

$ php 应用程序/控制台原则:generate:entities AcmeBlogBu​​ndle

为包“AcmeBlogBu​​ndle”生成实体

                                                                [RuntimeException]                                               

Bundle“AcmeBlogBu​​ndle”不包含任何映射实体。

doctrine:generate:entities [--path="..."] [--no-backup] 名称

【问题讨论】:

【参考方案1】:

您应该为字段添加映射信息。 Read more

像这样:

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

【讨论】:

伙计,我在发布此内容后阅读了 1000 次。如果你知道什么是正确的问题而不是说要添加或删除什么。 我已经编辑了答案。注意属性的注释 检查我的新实体 test 的更新并再次检查一些问题。【参考方案2】:

我犯了一个错误,即通过控制台添加一个映射类型为“php”的新实体,而不是我的默认“注释”。甚至不接触生成的类,我的网站就不会立即加载。它为我的用户类抛出了这个 MappingException。

我删除了可以修复它的新实体类,以及我能想到的所有其他内容。然后我查看了我的 app/Resources/config 目录。有一个名为 Doctrine 的新目录。它包含导致问题的实体的映射文件。当我删除此目录和文件时,异常消失了。

【讨论】:

【参考方案3】:

如果您想使用注释来定义映射,只需在生成实体时选择“注释”选项。

【讨论】:

-1 就像我说的,你没有完整阅读这个主题。首先,我使用 php 进行第二次更新,我使用注释并发布了实体 whit 注释。 如果你使用 php 映射,你的“Acme.BlogBu​​ndle.Entity.Posts.php”文件是什么样的?可以发一下吗?【参考方案4】:

虽然这个问题已经很老了,但我不想保密我是如何解决它的。似乎我在缓存中有一个旧的映射文件引用,因为我将它移到了另一个文件夹。清除缓存为我解决了这个问题。

【讨论】:

以上是关于Symfony2 找不到映射文件的主要内容,如果未能解决你的问题,请参考以下文章

由于找不到网络 未能映射驱动器

内存映射阅读器找不到全局内存映射对象

致命错误:找不到模块映射文件 YogaKit.modulemap

Win10系统里,应用软件找不到映射的网络驱动器,怎么解决?

intellij 编译 springmvc+hibernate+spring+maven 找不到hbm.xml映射文件

Symfony2 映射一对多多音