1
我有一個Symfony2的主要形式,與現場什麼是其他領域的集合類,像多標籤一個產品實體,但這些標籤具有唯一的哈希值。 有一個eventListener附加到主窗體。如果我向表單發送一個數據,並且發送一個標籤以及這個唯一的標籤,那麼這個類的唯一限制就是說該字段必須是唯一的。這個工作很好,但在這個EventListener中,我在數據庫中搜索這個獨特的字段,如果它是正確的,我做一個分配,我用數據庫中的一個實體替換髮布的內容。Symfony2的收集表格唯一性
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('eventDate', 'datetime',array(
'widget' => 'single_text',
'format' => 'yyyy-MM-dd HH:mm',
'invalid_message' => 'Wrong datetime format. Please use like this: 2015-09-20 14:45:12',
))
->add('eventEnds', 'datetime', array(
'widget' => 'single_text',
'format' => 'yyyy-MM-dd HH:mm',
'invalid_message' => 'Wrong datetime format. Please use like this: 2015-09-20 14:45:12',
))
->add('tag','collection', array(
'type' => new TagType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'prototype' => true,
'property_path' => 'professional',
'label' => false,
'options' => array(
'professional' => true,
),
))
->addEventListener(FormEvents::SUBMIT, [$this, 'submit'])
;
}
public function preSubmit(FormEvent $event)
{
/** @var MainForm $data */
$data = $event->getData();
foreach ($data->getTags() as $tag) {
if ($tag->getId() == null && $tag->getHash()){
$tagDB = $this->entityManager
->getRepository('ApplicationBundle:Tag')
->findOneBy([
'hash' => $professional->getHash(),
]);
if ($tagDB) {
$data->removeTag($tag);
$data->addTag($tagDB);
}
}
}
$event->setData($data);
}
如果我傾倒使用setData後的$數據值,我看到有從數據庫中的實體,但我仍然有一個獨特的驗證錯誤,我在驗證檢查,symfony中通在原崗位的內容。
爲什麼這樣,我該如何解決這個問題?
在預提交時間,我只有一個數據數組,如下:['eventDate'=>'2015-01-01 10:10:10','tag'=> [0 => ['hash'=' >'1235']]],我不能用DB中的對象替換那裏。 – ghostika
當然你可以看到我更新的答案 –