我定义了一个像:
这样的实体/**
* @ORM\ManyToOne(targetEntity="Pr\UserBundle\Entity\Client")
* @ORM\JoinColumn(name="client_id", referencedColumnName="id")
*/
private $client_id;
.....
public function setClientId($clientId = null)
{
$this->client_id = $clientId;
return $this;
}
我可以使用两个控制器创建新的数据库条目。第一个是" admin-only"管理员可以创建具有其选择的客户端ID的数据库条目:
->add('client_id', 'entity', array(
'data_class' => null,
'attr' => array(
'class' => 'selectstyle'),
'class' => 'PrUserBundle:Client',
'property' => 'name',
'required' => true,
'label' => 'staff.location',
'empty_value' => 'admin.customer_name',
'empty_data' => null
)
)
......
// Handling the form
$em = $this->getDoctrine()->getManager();
$saniType->setName($form->get('name')->getData());
$saniType->setClientId($form->get('client_id')->getData());
$saniType->setCreated(new \DateTime(date('Y-m-d H:m:s')));
$saniType->setCreatedBy($user->getUsername());
$em->persist($saniType);
$em->flush();
第二个是针对客户端本身,他无法设置不同的客户端ID。因此,我刚刚删除了表单字段" client_id"并将其替换为users-> getClientId():
$saniType->setSpecialClientId($form->get('client_id')->getData());
当我以管理员身份添加条目时,它可以正常工作。如果我尝试添加一个作为"客户端",它会崩溃,并显示以下错误消息
Warning: spl_object_hash() expects parameter 1 to be object, integer given in /var/www/symfony/webprojekt/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php line 1389
我是symfony的新手,所以我没有力量弄清楚会发生什么。我只知道在第一种情况下,管理员将提交一个对象(实体)。在第二个(客户端)的情况下,我通过
设置一个整数$user = $this->container->get('security.context')->getToken()->getUser();
是否有解决方案,以便我可以处理实体对象和给定的整数,就像客户端添加条目时那样?
答案 0 :(得分:2)
您不必知道客户端ID。你必须自己设置客户端。
/**
* @ORM\ManyToOne(targetEntity="Pr\UserBundle\Entity\Client")
* @ORM\JoinColumn(name="client_id", referencedColumnName="id")
*/
private $client;
.....
public function setClient(\Pr\UserBundle\Entity\Client $client = null)
{
$this->client = $client;
return $this;
}
答案 1 :(得分:2)
您应该将关系定义更改为:
/**
* @ORM\ManyToOne(targetEntity="Pr\UserBundle\Entity\Client")
* @ORM\JoinColumn(name="client_id", referencedColumnName="id")
*/
private $client;
.....
public function setClient($client = null)
{
$this->client = $client;
return $this;
}
然后是表格:
->add('client', 'entity', array(
'data_class' => null,
'attr' => array('class' => 'selectstyle'),
'class' => 'PrUserBundle:Client',
'property' => 'name',
'required' => true,
'label' => 'staff.location',
'empty_value' => 'admin.customer_name',
'empty_data' => null
)
)
处理表格:
form = $this->createForm(new SaniType(), $entity);
$form->handleRequest($request);
if ($form->isValid()) {
// perform some action...
return $this->redirect($this->generateUrl('some_success'));
}
有关处理表单的更多信息:http://symfony.com/doc/current/book/forms.html#handling-form-submissions
也一无所获:
用于自动更新属性,例如createdBy / updatedBy我建议您使用Doctrine Extension:https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/blameable.md
答案 2 :(得分:0)
我找到了一个解决方案:
Symfony2: spl_object_hash() expects parameter 1 to be object, string given in Doctrine
这是一种解决方法,但暂时还不错。