#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,
]);
}
Результат:
введите описание изображения здесь