【发布时间】:2020-05-13 07:53:00
【问题描述】:
我正在寻找一种使用 Symfony 4 创建嵌入式表单的方法。 我使用了一个查询,这个查询返回了一个数组。但是当我执行代码时出现以下错误:
表单的视图数据应该是类的一个实例 App\Entity\Categorie,但是是一个 (n) 数组。您可以通过以下方式避免此错误 将“data_class”选项设置为 null 或添加视图 将 a(n) 数组转换为 应用\实体\类别。
所以我的控制器看起来像这样:
/**
* @Route("/admin/categories/import/{userId}", name="admin.categorie.link", methods={"GET|POST"})
* @param Int $userId
* @return Response
*/
public function linkImport(Int $userId, Request $request)
{
$categories = $this->em->getRepository(Categorie::class)->checkIfNew($userId);
$form = $this->createForm(CategorieType::class, $categories);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->flush();
$this->addFlash('success', 'Catalogue modifié avec succès');
return $this->redirectToRoute('admin.catalogues.index');
}
return $this->render('admin/catalogues/link.html.twig', [
'categories' => $categories,
'form' => $form->createView()
]);
}
我的表单类型如下所示:
class CategorieType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('categorie_intitule')
->add('categorie_parent_id')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Categorie::class,
]);
}
}
我尝试使用 foreach 来构建表单
foreach ($categories as $categorie) {
$form = $this->createForm(CategorieType::class, $categorie);
$form->handleRequest($request);
}
但它在我的树枝内没有返回我。 那么你能告诉我更多关于这个错误的信息,以及如何解决它吗? 谢谢。
更新:根据@DoncCallisto 的回答,我尝试了以下方法:
我创建了一个 CategorieCollectionType :
class CategorieCollectionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('categories', CollectionType::class, [
'entry_type' => CategorieType::class,
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Categorie::class,
]);
}
}
并在我的控制器中更改它:
$categories = $this->em->getRepository(Categorie::class)->checkIfNew($userId);
$form = $this->createForm(CategorieCollectionType::class, ['categories' => $categories]);
但错误仍然相同。
这是来自 Symfony 调试的$categories 的转储:
array:1 [▼
0 => App\Entity\Categorie {#1395 ▼
-id: 52
-categorie_intitule: "-"
-categorie_parent_id: null
-produitCategorie_id: Doctrine\ORM\PersistentCollection {#1451 ▶}
-created_by: App\Entity\User {#1039 ▶}
}
]
【问题讨论】: