简体   繁体   English

Symfony 5:如何在表单类型文件的实体类型字段中使用“数据”?

[英]Symfony 5 : How to use 'data' in a entitytype field in a formtype file?

I'm creating a classic form where I have to add a name and select a value.我正在创建一个经典表单,我必须添加一个名称和 select 一个值。 I would like a value to be selected using the $id_combination_feature passed in the function.我希望使用 function 中传递的 $id_combination_feature 来选择一个值。 When I try this code in my controller, it works perfectly fine:当我在我的 controller 中尝试此代码时,它工作得非常好:

public function add_feature_value(FormFactoryInterface $formFactory, CombinationFeatureRepository
    $combinationfeatureRepository, Request $request,  $id_combination_feature){

        $combinationFeature=$combinationfeatureRepository->find($id_combination_feature);
        $builder=$formFactory->createBuilder();
        $builder
            ->add('name', TextType::class,[
                'label'=>'Nom de la valeur',
                'attr'=>[
                    'class'=>'form-control mb-2',
                    'placeholder'=>'Nom de la valeur'
                ]
            ])
            ->add('feature', EntityType::class, [
                'label'=>'Valeur',
                'placeholder'=>'-- Choisissez une caractéristique--',
                'class'=>CombinationFeature::class,
                'choice_label'=>function(CombinationFeature $combinationFeature){
                    return ucfirst($combinationFeature->getName());
                },
                'attr'=>[
                    'class'=>'form-control'
                ],
                'data'=>$combinationFeature

            ])
        ;
        $form=$builder->getForm();
        $formView=$form->createView();

        return $this->render('admin/combination_feature/add_combination_feature_value.html.twig', [
            'request'=>$request,
            'formView'=>$formView,
        ]);

However, if I create a formType using php bin/console make:form , how can use the $id_combination_feature or the $combinationFeatureRepository?但是,如果我使用php bin/console make:form创建 formType ,如何使用 $id_combination_feature 或 $combinationFeatureRepository? I tried to autowire them and it didn't work:我试图自动连接它们,但没有用:

class CombinationFeatureValueType extends AbstractType
{

    public $combinationFeatureRepository;
    public $id_combination_feature;

    public function __construct(CombinationFeatureRepository $combinationFeatureRepository, $id_combination_feature)
    {
        $this->combinationFeatureRepository=$combinationFeatureRepository;
        $this->id_combination_feature=$id_combination_feature;
        $this->combinationFeature=$combinationFeatureRepository->find($id_combination_feature);

    }

    public function buildForm(FormBuilderInterface $builder, array $options): void
    {

        $builder
            ->add('name', TextType::class,[
                'label'=>'Nom de la valeur',
                'attr'=>[
                    'class'=>'form-control mb-2',
                    'placeholder'=>'Nom de la valeur'
                ]
            ])
            ->add('combinationFeature', EntityType::class, [
                'label'=>'Valeur',
                'placeholder'=>'-- Choisissez une caractéristique--',
                'class'=>CombinationFeature::class,
                'choice_label'=>function(CombinationFeature $combinationFeature){
                    return ucfirst($combinationFeature->getName());
                },
                'attr'=>[
                    'class'=>'form-control'
                ],
                'data'=>$this->combinationFeature
            ])
        ;
    }

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

You can try to pass it through the form options.您可以尝试通过表单选项传递它。

In the controller where you are going to use the form you add what you want to pass inside the array of options.在 controller 中,您将使用表单,在选项数组中添加您想要传递的内容。

$form = $this->createForm(CombinationFeatureValueType::class, $data, [
    'combinationFeatureRepository' => $combinationFeatureRepository, 
    'id_combination_feature' => $id_combination_feature
]);

And this way you can use it inside the formType.这样你就可以在 formType 中使用它。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $combinationFeatureRepository = $options['combinationFeatureRepository'];
    $id_combination_feature = $options['id_combination_feature'];
}

Wish could help!希望能帮上忙!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM