【问题标题】:symfony 2- fill up the form in controllersymfony 2-在控制器中填写表格
【发布时间】:2013-08-11 20:07:44
【问题描述】:

我有一个表格,我想在控制器中填写 1 个字段 (fromID)(我曾经使用 setFromId 方法),但我收到错误消息。 有我的代码:

 public function newAction()
{
    $entity = new PrivateMessage();

    $user = $this->container->get('security.context')->getToken()->getUser();
    $entity->setFromId($user);
    $form   = $this->createForm(new PrivateMessageType(), $entity);
    $form->setData($entity);


    return $this->render('AcmeStoreBundle:PrivateMessage:new.html.twig', array(
        'entity' => $entity,
        'form'   => $form->createView(),
    ));
}

我错过了什么吗? @edit:我忘了补充说,当字段 fromID 在表单中可用时它正在工作。但我不想让用户更改它。

这是 PrivateMessage 实体的一部分:

class PrivateMessage

{/** * @var 整数 * * @ORM\Column(name="id", type="integer") * @ORM\ID * @ORM\GeneratedValue(strategy="AUTO") */ 私人 $id;

/**
 *
 * @ORM\ManyToOne(targetEntity="User", inversedBy="pm_to")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="to_id", referencedColumnName="id", nullable=false)
 * })
 */
private $toID;

/**
 *
 * @ORM\ManyToOne(targetEntity="User", inversedBy="pm_from")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="from_id", referencedColumnName="id", nullable=false)
 * })
 */
private $fromID;

 function __construct()
{
    $this->setOpened(false);
    $this->setRecipientDelete(false);
    $this->setSenderDelete(false);
}
/**
 * @ORM\PrePersist
 */
public function setFromIdValue()
{
    $this->fromID= $this->getFromId();
}

/**
 * Set fromID
 *
 * @param \Acme\Bundle\Entity\User $fromId
 * @return PrivateMessage
 */
public function setFromId(\Acme\StoreBundle\Entity\User $fromId = null)
{
    $this->fromID = $fromId;

    return $this;
}

/**
 * Get fromID
 *
 * @return \Acme\StoreBundle\Entity\User 
 */
public function getFromId()
{
    return $this->fromID;
}

【问题讨论】:

  • 可以粘贴实体类吗?
  • 出现错误“执行'INSERT INTO PrivateMessage (time_sent, subject, message, opens, recipientDelete, senderDelete, to_id, from_id) VALUES (?, ?, ?, ?, ? , ?, ?, ?)' with params ["2013-08-09 22:12:09", "gd", "hgdh", 0, 0, 0, 1, null]: SQLSTATE[23000]: 完整性约束违规:1048列'from_id'不能为空“
  • 对象被持久化时出现错误。您还没有显示代码。您在属性名称中使用“Id”这一事实表明您不了解 Doctrine 2 中对象的使用。发布表单时,您需要一些东西将 id 转换回对象。考虑显示发布代码。

标签: symfony symfony-2.1


【解决方案1】:

有比控制器更好的地方来设置(甚至覆盖)您的表单字段 - 事件监听器。您应该为prePersist 教义事件和设置/更新字段编写侦听器。请查看文档中的示例:http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html#configuring-the-listener-subscriber

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 2023-03-09
    • 2017-06-27
    相关资源
    最近更新 更多