[英]Bind form data to variable before persist - Symfony2 / Doctrine2
目前,我正在嘗試將用戶選擇的選項綁定到變量,然后在持久存儲數據之前在函數中使用該變量。
我當前的實體代碼是這樣的:
public function setUnit($unit)
{
$this->unit = $unit;
return $this;
}
public function getUnit()
{
return $this->unit;
}
public function setSize($size)
{
$unit = $this->getUnit();
$this->size = $size = new Mass($size, $unit);
$this->size = $size->toUnit('mg');
return $this;
}
和我的形式:
$builder
->add('size')
->add('unit')
;
最后是我的控制器:
public function createAction(Request $request)
{
$entity = new Products();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$entity->setUser($this->get('security.context')->getToken()->getUser());
$em->persist($entity);
$em->flush();
還有很多代碼,但是我已經刪除了所有無關的東西。
所以。基本上我想做的是:
如果我自己指定set $ unit變量,它可以正常工作($ unit ='g'),但是當我嘗試通過$ this-getUnit傳遞單位時; 沒有發送任何內容,而將$ unit變量保留為null。
Unknown unit of measure ()
如果我嘗試這樣做但更新現有條目,則可以正常工作,但始終落后一步,例如:
因此,如果在數據庫中設置了它的“ g”,而我嘗試轉換為“ oz”,它將轉換為“ G”,然后在下一次嘗試下,如果我說輸入kg,它將由之前的oz轉換。
我假設發生這種情況是因為表單有效,因此Symfony嘗試保留該實體,但隨后命中了新的Mass函數,該函數引發錯誤,因為尚未將其發送給$ unit變量。 我如何在持久化之前發送$ unit變量,以便將其轉換為新的$ size。
現在和昨晚已經花了很多時間認真地做這件事,昨晚我醒來想了太多次,但現在我還是不能放棄,我感到如此親近。
((我正在使用的單位轉換器是https://github.com/triplepoint/php-units-of-measure/以防萬一有人在想)
public function setSize($size)
{
$this->size = $size;
return $this;
}
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function fixSize()
{
$unit = $this->getUnit();
$size = $this->getSize();
$mass = new Mass($size, $unit);
$this->size = $mass->toUnit('mg');
}
在我的orm.yml中
lifecycleCallbacks:
prePersist: [ setCreatedAtValue, fixSize ]
preUpdate: [ setUpdatedAtValue, fixSize ]
現在快樂:)謝謝。
嘗試在prePersist或preUpdate事件中 “固定”大小。
/**
* @Entity
* @HasLifecycleCallbacks
*/
class YourEntity {
// ...
public function setSize($size)
{
$this->size = $size;
return $this;
}
/**
* @PrePersist
* @PreUpdate
*/
public function fixSize()
{
$unit = $this->getUnit();
$size = $this->getSize();
$mass = new Mass($size, $unit);
$this->size = $mass->toUnit('mg');
}
或另一種方式
public function setUnit($unit)
{
$this->unit = $unit;
$this->updateSize();
return $this;
}
public function setSize($size)
{
$this->size = $size;
$this->updateSize();
return $this;
}
public function updateSize()
{
$unit = $this->getUnit();
$size = $this->getSize();
if ($unit && $size) {
$mass = new Mass($size, $unit);
$this->size = $mass->toUnit('mg');
}
return $this;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.