在 Symfony2 中检测实体配置错误
Posted
技术标签:
【中文标题】在 Symfony2 中检测实体配置错误【英文标题】:Detecting an entity mis-configuration in Symfony2 【发布时间】:2013-01-06 21:14:17 【问题描述】:好吧,我不知道如何修复我的项目中的错误。
我正在尝试处理具有多对多属性关系的嵌套表单。 错误表明它无法创建关联,因为其中一方需要 ID。
好的。所以我试图只创造缺失的一面。 但还是同样的错误。
最后,我意识到这个简单的代码仍然存在同样的问题:
public function onSuccess(Page $page)
$this->em->flush();
如果您收到诸如“嘿,没有什么可刷新的!”之类的错误消息,我将不胜感激。 但是不,仍然是同样的错误:我必须先创建对象(及其 id)才能关联它。
我查看了堆栈跟踪。是的,似乎 UnitOfWork ->computeAssociationChanges 在刷新后被调用,并且需要关联对象的 Id。
如果 flush 命令产生错误,我如何在数据库中创建对象?
【问题讨论】:
你使用什么 id 生成策略?教义 2 手册中的第 4.8 节。如果它是自动的,那么你不需要在冲洗时做任何特别的事情。如果您使用手动策略,则需要在刷新之前创建 id。可能会考虑创建一个命令对象并测试您的模型,而无需经过所有的表单处理。 感谢您的回答(很抱歉这么晚才回复...)。我的大多数表都是在 auto.id 中生成的。只有一张桌子不是。这是保存多对多关系属性的表。因此,它只有每边的两个 id 和属性。我同意我需要先拥有两个 ID 才能建立这种关系。什么是命令对象?我如何使用它来测试模型? 【参考方案1】:问题是由于实体类中的一个重大拼写错误。 我通过使用 Symfony 的附加组件检查架构结构找到了它:
<?php
namespace Lp\LibBundle\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Bundle\DoctrineBundle\Command\Proxy\DoctrineCommandHelper;
use Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand;
class MyValidateSchemaCommand extends ValidateSchemaCommand
/**
* (non-PHPdoc)
* @see Tools/Console/Command/Doctrine\ORM\Tools\Console\Command.ValidateSchemaCommand::configure()
*
* Modifies name of the command to be in Doctrine namespace
* Adds the Helper em for the entity manager which is not defined in Doctrine class
* @author ulrich, 09/09/11
*/
protected function configure()
parent::configure();
$this->setName('doctrine:orm:validate-schema');
$this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command');
/**
* (non-PHPdoc)
* @see Tools/Console/Command/Doctrine\ORM\Tools\Console\Command.ValidateSchemaCommand::execute()
*
* Ajoute le Helper em pour l'entity manager qui n'est pas définis dans la class Doctrine
* @author ulrich, 09/09/11
*/
protected function execute(InputInterface $input, OutputInterface $output)
DoctrineCommandHelper::setApplicationEntityManager($this->getApplication(), $input->getOption('em'));
return parent::execute($input, $output);
Source: Ulrich
这允许使用该命令指令来检测实体拼写错误。
> php app/console doctrine:orm:validate-schema
【讨论】:
以上是关于在 Symfony2 中检测实体配置错误的主要内容,如果未能解决你的问题,请参考以下文章
另一个未知实体命名空间别名错误(Symfony2,手动创建的实体)
使用 Monolog 在 Symfony2 中记录 PHP 致命错误