Symfony 2变量实体命名

时间:2013-12-03 00:16:23

标签: symfony doctrine-orm

我觉得这应该不是很难,但尽可能地尝试,我一直都会遇到错误。

我想要做的是,有一个“添加”功能,它将处理向任何/所有表添加记录的基本功能。基本上,帖子数据将包含表名,以及要插入的字段/值。控制器本身确认用户有权访问这些内容,然后在创建实体的新实例之前验证字段是否有效,这就是事情变得混乱的地方:

$entityName = 'Products';
$row = new $entityName(); //doesn't work
$row new Products(); //works

我没有找到使用实体管理器创建新实体的方法或任何示例,或者可能有效,因为我已经创建了使用EM进行查询,更新和删除的功能,但我可以不能使用添加功能。

2 个答案:

答案 0 :(得分:2)

1。您的问题几乎肯定是命名空间(见下文)。试试这个:

$entityName = 'My\Bundle\Entity\Products';
$row = new $entityName();

应该有效。 ;)

2. 如果要使用EntityManager创建新实例,请尝试以下操作:

$entityName = 'My\Bundle\Entity\Products';
$row = $em->getClassMetadata($entityName)->newInstance();

...假设$em是您的EntityManager。 : - )

3. 要“证明”您的问题是命名空间,请在从命令行运行的普通.php文件中尝试此操作:

namespace Foo;
class Test {}

$class1 = 'Foo\Test';
$class2 = 'Test';

$x = new Test();    // Will work
$y = new $class1(); // Will work
$z = new $class2(); // Will trigger "Class 'Test' not found" fatal error

答案 1 :(得分:0)

两件事:

  • 尝试使用“产品”代替'产品'
  • 我认为你的实体产品有一个命名空间,它是必需的(即使你声明了一个use语句)。请尝试使用“我的\ Bundle \ Entity \ Products”。