我制作了一個搜索表單,可以在其中選擇“bigcity”和“category”。在 SearchController.php 中,我設定了一個會話,以便當我回傳搜索頁面時,我可以檢索我選擇的值。我嘗試{{ form(form) }}在 search.html.twig 中設定這些值。
它適用于“大城市”,但不適用于“類別”。哪里可能出錯?
search.html.twig
{% extends 'base.html.twig' %}
{% block main %}
{{ form_start(form) }}
<p>Où souhaites-tu faire une sortie ou une activité ?</p>
{{ form_widget(form.bigcity, {'attr' : {'class' : 'mb-3' }, 'value' : app.session.get('searchFormData').bigcity.id} ) }}
<p>Quel type de sortie ou d’activité t’intéresse ?</p>
{{ form_widget(form.category, {'attr' : {'class' : 'mb-3' }, 'value' : app.session.get('searchFormData').category.id} ) }}
{{ form_widget(form.save, {'label': 'Je valide'} ) }}
{{ form_end(form) }}
{% endblock %}
** SearchController.php**
<?php
namespace App\Controller\Front;
use App\Form\SearchType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SearchController extends AbstractController
{
#[Route('/search', name: 'search')]
public function search(
Request $request,
SessionInterface $sessionInterface,
EventRepository $eventRepository,
){
$searchFormData = $sessionInterface->get('searchFormData');
$form = $this->createForm(SearchType::class, ['data' => $searchFormData]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$sessionInterface->set('searchFormData', $data);
$events = $eventRepository->findAll();
return $this->redirectToRoute("events", [
'bigcity'=> $form->get('bigcity')->getData()->getId(),
'category'=> $form->get('category')->getData()->getId(),
'events' => $events
]);
}
return $this->renderForm('front/search.html.twig', [
'form' => $form,
]);
}
}
搜索型別.php
<?php
namespace App\Form;
use App\Entity\BigCity;
use App\Entity\Category;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class SearchType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('bigcity', EntityType::class, [
'class' => BigCity::class,
'choice_label' => 'name',
'placeholder' => 'Sélectionne une grande ville',
])
->add('category', EntityType::class, [
'class' => Category::class,
'choice_label' => 'image',
'expanded' => true,
'multiple' => false,
])
->add('save', SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null
]);
}
}
uj5u.com熱心網友回復:
那是因為在 SearchType 類別中具有 'expanded' => true,這就是為什么它適用于 bigcity 但不適用于類別。你可以做的是這樣的:
{{ form_label(form.category) }}
{% for key, categoryItem in form.category.children %}
{{ form_widget(categoryItem, {'attr' : {'class' : 'mb-3' }, 'checked': categoryItem.vars.value == app.session.get('searchFormData').category.id ? 'checked' : '' } ) }}
{% endfor %}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/518613.html
標籤:形式交响乐会话变量
