0

フォームがあり、コントローラーの 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 integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $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;
}
4

1 に答える 1

0

フォームフィールドを設定する(オーバーライドすることもある)コントローラーよりも優れた場所、つまりイベントリスナーがあります。prePersistdoctrine イベントと設定/更新フィールドのリスナーを作成する必要があります。ドキュメントの例を見てください: http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html#configuring-the-listener-subscriber

于 2013-08-09T22:59:01.417 に答える