首页 > 解决方案 > 带有实体的 Symfony 表单

问题描述

嗨,我需要一个关于实体类的思考帮助。我有编辑功能

/**
 * @Route("/{id}/edit", name="admin_product_group_edit", methods={"GET","POST"})
 */
public function edit(Request $request, ProductGroup $productGroup): Response
{
    $form = $this->createForm(ProductGroupType::class, $productGroup);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $this->getDoctrine()->getManager()->flush();

        return $this->redirectToRoute('admin_product_group_index', [
            'id' => $productGroup->getId(),
        ]);
    }

    return $this->render('admin/product_group/edit.html.twig', [
        'product_group' => $productGroup,
        'form' => $form->createView(),
        'scrollUp' => true,
    ]);
}

我有表格类型

use App\Entity\ProductGroup;
use App\Entity\ProductType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ProductGroupType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('nameDe')
            ->add('nameEn')
            ->add('descriptionDe')
            ->add('descriptionEn')
            ->add('rank')
            ->add('active')
            ->add('creatDate')
            ->add('updateDate')
            ->add('productTypes', EntityType::class, [
                // looks for choices from this entity
                'class' => ProductType::class,
                // uses the User.username property as the visible option string
                'choice_label' => 'nameDe',
                // used to render a select box, check boxes or radios
                // 'multiple' => true,
                // 'expanded' => true,
            ]);
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => ProductGroup::class,
        ]);
    }
}

通过创建一个新的 ProductGroup 一切都很好,但是通过编辑它,我无法获得编辑表单。

我收到这个错误

Argument 1 passed to App\Controller\Admin\ProductGroupController::edit() must be an instance of App\Entity\ProductGroup, instance of App\Entity\ProductType given, called in /var/www/symfony-michael-roskosch/htdocs/vendor/symfony/http-kernel/HttpKernel.php on line 150

这是带有 symfony2 的 symfony 4.3 我对此没有任何问题,你能给我一个提示吗?

标签: formssymfonyentity

解决方案


好的,我找到了

我通过 orm 注释链接了错误的 repositoryClass

/**
- * @ORM\Entity(repositoryClass="App\Repository\ProductTypeRepository")
+ * @ORM\Entity(repositoryClass="App\Repository\ProductGroupRepository")
 */
class ProductGroup
{

取实体名称 ProductType 不是一个好主意,因为您有表格 ProductTypeType。在 bin/console make:crud 之后,代码中出现了一些错误。我不知道是我昨晚做的,还是它自己的粗加工过程。

没关系,现在它可以工作了:-)


推荐阅读