Symfony2 找不到映射文件
Posted
技术标签:
【中文标题】Symfony2 找不到映射文件【英文标题】:Symfony2 No mapping file found 【发布时间】:2013-09-18 12:03:00 【问题描述】:我正在使用 symfony2 并收到此错误:
找不到名为“Acme.BlogBundle.Entity.Posts.php”的映射文件 类'Acme\BlogBundle\Entity\Posts'。 500内部服务器错误 - 映射异常
我生成Entity php app/console dictionary:generate:entity
实体名称:AcmeBlogBundle:Post
格式:php
我放在 Acme:BlogBundle: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.BlogBundle.Entity.Posts.php”的文件 'Acme\BlogBundle\Entity\Posts'。 在不适用 在 /var/www/html/Symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php 第 74 行
在 Doctrine\Common\Persistence\Mapping\MappingException::mappingFileNotFound('Acme\BlogBundle\Entity\Posts', 'Acme.BlogBundle.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\BlogBundle\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\BlogBundle\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\BlogBundle\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\BlogBundle\Entity\Posts') 在 /var/www/html/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php 第 268 行
在 Doctrine\ORM\EntityManager->getClassMetadata('Acme\BlogBundle\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/BlogBundle/Controller/DefaultController.php 第 23 行
在 Acme\BlogBundle\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 AcmeBlogBundle
为包“AcmeBlogBundle”生成实体
[RuntimeException]
Bundle“AcmeBlogBundle”不包含任何映射实体。
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.BlogBundle.Entity.Posts.php”文件是什么样的?可以发一下吗?【参考方案4】:虽然这个问题已经很老了,但我不想保密我是如何解决它的。似乎我在缓存中有一个旧的映射文件引用,因为我将它移到了另一个文件夹。清除缓存为我解决了这个问题。
【讨论】:
以上是关于Symfony2 找不到映射文件的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:找不到模块映射文件 YogaKit.modulemap
Win10系统里,应用软件找不到映射的网络驱动器,怎么解决?