ввод переменной из контроллера в FormType

#symfony #variables #controller

#симфония #переменные #контроллер

Вопрос:

Я нахожусь под управлением symfony 4.4.

Я хотел бы знать, как передать переменную из моего контроллера в мой FormType для предварительного заполнения поля. Я искал, но не мог найти.

Мой контроллер:

  class TeamController extends AbstractController
    public function index($id,Request $request,MailerInterface $mailer)
        {
    $repo = $this->getDoctrine()->getRepository(Team::class);
        $team = $repo->find($id);

           $formcontact = $this->createForm(ConvocationType::class);
           $contact = $formcontact->handleRequest($request);
           if($formcontact->isSubmitted() amp;amp; $formcontact->isValid()){
 
           foreach ($team->getAdherents() as $c) {
            $mails[] = $c->getEmail();
        } 
             
            foreach ($contact->get('emailTo')->getData() as $c) {
                if($c->getEmail()){
                $emails[]= $c->getEmail();
      
    }
}
   
             if(isset($emails)){
               $email = (new TemplatedEmail())
               ->from($contact->get('email')->getData())
               ->to(...$emails)
               ->subject('contact')
               ->htmlTemplate('emails/convocation_match.html.twig')
               ->context([
                  'catadherent' =>$catadherent,
                  'mail' => $contact->get('email')->getData(),
                  'mailTo'=>$contact->get('emailTo')->getData(),
                  'team'=> $team->getName(),
                  'convocation_date'=>$contact->get('convocation_date')->getData(),
                  'club_adverse'=>$contact->get('club_adverse')->getData(),
                  'rendez_vous_date'=>$contact->get('rendez_vous_date')->getData(),
                  'lieu'=>$contact->get('lieu')->getData(),
                  'match_date'=>$contact->get('match_date')->getData(),
                  'stade'=>$contact->get('stade')->getData(),
 
               ]);
               $mailer->send($email);
               $this->AddFlash(
                   'success',
                   "Votre email a bien été envoyé !"
               );
               //return $this->redirectToRoute('adherent_show',['id' => $adherent->getId()]);
              }
              else{
                $this->AddFlash(
                    'danger',
                    "Votre email n'a pas été envoyé car aucun mail n'a été sélectionné !"
                );
              }
            }
         
       
       
        return $this->render('team/index.html.twig', [
            'team' => $team,
            'team1' =>$team1,
            'catadherent' => $catadherent,
            'adherent' => $adherent,
            'mails' => $mails,
            'formcontact' =>$formcontact->createView()
            
        ]);
    }
}
 

Это моя переменная mail, которую я хотел бы получить в моем FormType:

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
     ...
     ->add('emailTo',EntityType::class, [
            'label' => 'Emails sélectionnés',
            'multiple' => true,
            'expanded' => true,
            'class'  => Adherent::class,
            'choice_label' => 'LNAndFn',
            'mapped' => false,
            'choice_attr' => function() {
                return ['checked' => 'checked'];
            },
 

Я хотел бы удалить EntityType и вставить в данные мою переменную ‘$ mails’ и сохранить мои флажки.

заранее благодарим вас за помощь

Ответ №1:

используйте array_combine для писем

 public function buildForm(FormBuilderInterface $builder, array $options)
{
    $mails = array_combine($options['mails'], $options['mails'])
    ...
 

Ответ №2:

немного продвинулся, мне удается получить значение моей переменной, когда я делаю var_dump моей переменной в FormType, я нахожу свои электронные письма, но, с другой стороны, они отображаются в числовом виде с моими флажками:

мои контроллеры:

 foreach ($team->getAdherents() as $c) {
            $mails[] = $c->getEmail();
        }
      //var_dump($mails);
   
     
           /***formulaire de contact*******/
           $formcontact = $this->createForm(ConvocationType::class,$mails,[
            'mails' => $mails,
        ]);
           $contact = $formcontact->handleRequest($request);
           if($formcontact->isSubmitted() amp;amp; $formcontact->isValid()){
 

Мой FormType:

 class ConvocationType extends AbstractType
{
    
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $mails= $options['mails'];
        
   //var_dump($mails);exit();
 
        $builder
->add('emailTo', ChoiceType::class, [
            'choices'  => $mails,
            'multiple' => true,
            'expanded'=>true,
            'mapped'=>true,
            'label'=> 'Emails sélectionnées',
            'choice_attr' => function() {
                return ['checked' => 'checked'];
            },
            ])
        ;
    }
 
    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            // Configure your form options here
            'mails' => null,
        ]);
 
  
    }
 

Результат:
введите описание изображения здесь