【问题标题】:Symfony on click adding a form rowSymfony 单击添加表单行
【发布时间】:2021-08-09 18:54:21
【问题描述】:

我正在尝试使用 Symfony 制作一个表单,以便能够通过单击按钮添加新行。我不能使用 SubmitType 类,因为提交后 symfony 不能添加新行。 ButtonType 类没有基本函数 isClicked()。这是我的表格:

<?php

namespace App\Form;

use App\Entity\Team;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;

final class TeamFormType extends AbstractType
{

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('teamName', TextType::class, [
                'label' => false,
                'attr' => array(
                    'placeholder' => 'Wpisz Nazwe Drużyny'
                )
            ])
            ->add('teamCity', TextType::class, [
                'label' => false,
                'attr' => array(
                    'placeholder' => 'Wpisz Nazwe Miasta'
                )
            ])
            ->add('teamCoach', TextType::class, [
                'label' => false,
                'attr' => array(
                    'placeholder' => 'Wpisz Imie i Nazwisko Trenera'
                )
            ]);
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event){
            $form = $event->getForm();

            for ($i = 1; $i <= 6; $i++) {
                $name = 'zawodnik' . $i .'';
                $form->add($name, TextType::class, [
                    'mapped' => false,
                    'label' => false,
                    'attr' => array(
                        'placeholder' => 'Imie i Nazwisko Zawodnika'
                    )
                ]);
            }
            $form->add('agreeTerms', CheckBoxType::class, [
                'mapped' => false,
                'required' => true,
                'label' => 'Zaakceptuj regulamin'
            ])
            ->add('Submit', SubmitType::class, [
                'label' => 'Wyślij Zgłoszenie'
            ])
            ->add('addRow', ButtonType::class, [
                'label' => 'Dodaj zawodnika'
            ]);
        });
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Team::class,
            'csrf_protection' => true,
            'csrf_field_name'=> '_token',
            'csrf_token_id' => 'team_item'
        ]);
    }
}

和控制器:

<?php


namespace App\Controller;


use App\Form\TeamFormType;
use Doctrine\DBAL\Types\TextType;
use Doctrine\ORM\EntityManagerInterface;
use http\Env\Request;
use http\Env\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class FormsController extends AbstractController
{
    public function createTeamForm(Request $request, EntityManagerInterface $entityManager) :Response
    {
        $teamEntity = new Team();
        $form = $this->createForm(TeamFormType::class);
        $form->handleRequest($request);
        if($form->isSubmitted() && $form->isValid()) {
            if($form->get('addRow')->isClicked()) {
                $form->add('something', TextType::class, [
                    'label' => false,
                    'attr' => array(
                        'placeholder' => 'Imie i Nazwisko zawodnika.'
                    )
                ]);
            }

            $entityManager->persist($teamEntity);
            $entityManager->flush();

            $this->addFlash('success', 'Pomyślnie Utworzono Drużyne');
            return $this->redirectToRoute('index');
        }
    }
}

任何人都想创建这样的按钮?

【问题讨论】:

    标签: php forms symfony button onclick


    【解决方案1】:

    我建议你使用 Javascript 和 css,创建你的行并隐藏它,然后,onClick,让 em 出现一个 JS 函数来修改 css 表

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      相关资源
      最近更新 更多