2
我有一個擁有訂閱ArrayCollection的用戶實體。我有這些制定者和獲得者。Symfony2表單實體處理
public function addSubscription(\Doge\WowBundle\Entity\Subscription $subscription)
{
$this->subscriptions[] = $subscription;
return $this;
}
public function removeSubscription(\Doge\WowBundle\Entity\Subscription $subscription)
{
$this->subscriptions->removeElement($subscription);
}
public function getSubscriptions()
{
return $this->subscriptions;
}
還有另一個名爲Plan的實體。訂閱基本上是用戶和計劃之間的中間實體,但它擁有一個額外字段,因此有必要成爲專用實體。
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="subscriptions")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $user;
/**
* @ORM\ManyToOne(targetEntity="Plan", inversedBy="subscriptions")
* @ORM\JoinColumn(name="plan_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $plan;
/**
* @ORM\Column(type="date")
*/
protected $nextDue;
否則,它只是與生成的自動中間表的多對多關係。
現在在用戶註冊表單,用戶可以使用此代碼在FormBuilder在計劃表中可用的計劃之間進行選擇
$builder->add('subscriptions', 'entity', array('class' => 'DogeWowBundle:Plan'))
如何創建給出的計劃對象的新認購對象?我會在控制器中這樣做嗎?使用數據變換器?最佳做法是什麼?
剩下的問題是「既沒有屬性」訂閱「也沒有方法」setSubscriptions()「,」__set()「或」__call()「之一存在並且在類中具有公共訪問權限。我如何調用addSubscription函數,看到可以有多個? –
其次,訂閱中的其他字段如何通過編程方式不通過表單設置? –
假設你有映射到一個用戶, $形成= $這 - >的CreateForm(新RegistrationType(),$用戶)一個登記表; 用戶已經擁有的任何訂閱將在表單呈現時被選中。那麼當handleRequest被調用時,它會將表單中的所有數據都設置爲實體,因此您必須爲第一種方法實施setSubscriptions()。 –