我正在关注Symfony2的表单处理:
public function createAction()
{
$entity = new Node();
$request = $this->getRequest();
$form = $this->createForm(new NodeType(), $entity);
$form->bindRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getEntityManager();
$em->persist($entity);
$em->flush();
问题是“节点”实体有一些其他字段不是由用户填充的,而是由控制器脚本中的进程填充的。这些“系统生成的”值也应与表单中的“用户生成”值一起保留。
我不确定如何将系统值添加到实体。
这是我的OOP知识的缺点,但我在文档或在线中找不到任何示例。谢谢!
答案 0 :(得分:2)
我认为你需要在Node类中添加一些getXXX / setXXX方法(或者查看它们的类代码),所以你的代码看起来像
$em = $this->getDoctrine()->getEntityManager();
$entity->setPropertyOne('some value of mine');
$entity->setCurrentUserId($this->get('security.context')
->getToken()->getUser()->getId());
// another entity setters
$em->persist($entity);
在你的情况下不知道它是否会对你有帮助,但我建议阅读有关Doctrine 2事件的here。
我还强烈建议你阅读这篇文章(非正式的)Symfony2 book :)
答案 1 :(得分:1)
如果您想在实体中而不是在控制器中进行管理。如果您正在使用YML,那么只需将其添加到YML文件
即可lifecycleCallbacks:
prePersist: [ doPrePersist ]
并在实体中添加此方法
function doPrePersist()
{
$this->publish = true;
$this->isDeleted = false;
}
如果您正在使用注释,则在实体中添加注释标记
/**
* @ORM\prePersist
*/
function doPrePersist()
{
$this->publish = true;
$this->isDeleted = false;
}