我經常在一些研究中找到答案來解決我的問題,但現在情況並非如此。假設我有兩個實體,「Task」和「TaskCategory」,每個任務都有一個類別。 我想讓我的用戶不僅可以將現有的類別歸功於他們的任務,還可以創建新的類別。選擇或創建一個實體
下面的代碼我到目前爲止:
<?php
// TaskCategoryType.php
class TaskCategoryType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
;
}
// Some stuff...
和
<?php
// TaskType.php
// Some stuff...
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// Add some fields there
->add(
'category',
TransformableEntityType::class,
['class' => 'AppBundle:TaskCategory']
)
->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$task = $event->getData();
$form = $event->getForm();
if (empty($task['category']['id']) && !empty($task['category']['name'])) {
$task['category']['id'] = null;
$event->setData($task);
$form->remove('category');
$form->add('category', TaskCategoryType::class);
}
})
;
}
// Some stuff...
它工作正常的創建任務,但是當我編輯現有的任務,它編輯關聯TaskCategory而不是創建一個新的。 我試圖強制創建一個新的TaskCategory:$ task ['category'] ['id'] = null;但它不起作用。
感謝您的幫助,我真的堅持:(
編輯:我忘了提,我用這種形式只能作爲這就是爲什麼我只有一個「類」中的一個API,否則我會已經使用另一個「category_new」字段。
如果您在編輯的情況下進入'if'功能? – DOZ
我無法確定它是否是在窗體內編輯/創建的。 只有在未設置類別標識並設置類別名稱的情況下,我纔會進入if。這意味着我試圖創建一個新的類別。 – CuzYouKnow
爲什麼不檢查*。empty($ task ['category'] ['id'])*而不是* empty($ task ['category'] ['id'])* *如果id不爲空(=已經存在),它不是來if-block – Rinat