我試圖顯示用戶根據兩個特征選擇的事件串列:大城市和類別。因此,他需要在登陸活動頁面之前使用搜索表單選擇“大城市”和“類別”。
首先,我成功地在標簽中顯示選定的資訊,但是當我嘗試顯示事件串列時,我得到了這個錯誤,Variable "category" does not exist.比如我的樹枝或我的控制器“忘記了”什么是 bigcity 和 category。
我不明白問題可能是什么。
事件控制器.php
<?php
namespace App\Controller\Front;
use App\Form\SearchType;
use App\Repository\EventsRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class EventsController extends AbstractController
{
#[Route('/search', name: 'search')]
public function search(
Request $request,
SessionInterface $sessionInterface,
){
$data = $request->request->all();
$sessionSearchFormData = $sessionInterface->get('searchFormData');
$form = $this->createForm(SearchType::class, ['data' => $sessionSearchFormData]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$sessionInterface->set('searchFormData', $data);
return $this->redirectToRoute('events', [$data]);
}
return $this->renderForm('front/search.html.twig', [
'form' => $form,
]);
}
#[Route('/events', name: 'events')]
public function events(
EventsRepository $eventsRepository,
){
$events = $eventsRepository->findAll();
return $this->render("front/events.html.twig", ['events' => $events]);
}
}
search.html.twig
{% extends 'base.html.twig' %}
{% block title %}Liste des sorties et des activités !{% endblock %}
{% block main %}
{{ form_start(form) }}
<p>Où souhaites-tu faire une sortie ou une activité ?</p>
{{ form_widget(form.bigcity) }}
<p>Quel type de sortie ou d’activité t’intéresse ?</p>
{{ form_widget(form.category) }}
{{ form_widget(form.save, {'label': 'Je valide') }}
{{ form_end(form) }}
</div>
{% endblock %}
events.html.twig
{% extends 'base.html.twig' %}
{% block title %}Liste des activités {{ category.title }} à {{ bigcity.name }}{% endblock %}
{% block main %}
<div class="events">
<h1 class="display-6 pt-3">
<img src="{{ asset('img/logos/') }}{{ category.image }}" alt="使用 Symfony 如何檢索搜索表單中提供的資料?錯誤:變數不存在" width="auto" height="40">
à <b hljs-number">1">{{ bigcity.name }}</b>
</h1>
<div hljs-number">50"></div>
<div hljs-string">">
<div hljs-number">12 col-md-6">
<h2 hljs-number">4">
<img src="{{ asset('img/titres/zpeak-sorties.svg') }}" alt="使用 Symfony 如何檢索搜索表單中提供的資料?錯誤:變數不存在">
</h2>
<ul hljs-keyword">list-group">
{% for event in events %}
{% if event and event.organizer.status == 'organizer' %}
<a hljs-keyword">list-group-item list-group-item-action">
<img src="{{ asset('img/flag_images/' ~ event.spokenlanguage.image) }}" alt="使用 Symfony 如何檢索搜索表單中提供的資料?錯誤:變數不存在" hljs-number">2"> {{ event.title }}
</a>
{% else %}
<p>Il n'y a pas de zpeak sortie organisée.</p>
{% endif %}
{% endfor %}
</ul>
</div>
<div hljs-number">12 col-md-6">
<h2 hljs-number">4">
<img src="{{ asset('img/titres/zpeak-idees.svg') }}" alt="使用 Symfony 如何檢索搜索表單中提供的資料?錯誤:變數不存在">
</h2>
<ul hljs-keyword">list-group">
{% for event in events %}
{% if event and event.organizer.status == 'member' %}
<a hljs-keyword">list-group-item list-group-item-action">
<img src="{{ asset('img/flag_images/' ~ event.spokenlanguage.image) }}" alt="使用 Symfony 如何檢索搜索表單中提供的資料?錯誤:變數不存在" hljs-number">2"> {{ event.title }}
</a>
{% else %}
<p>Il n'y a pas de zpeak idée proposée.</p>
{% endif %}
{% endfor %}
</ul>
</div>
</div>
</div>
{% endblock %}
搜索型別.php
<?php
namespace App\Form;
use App\Entity\BigCity;
use App\Entity\Categories;
use Doctrine\ORM\EntityManagerInterface;
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
{
private EntityManagerInterface $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$bigcity = $options['sessionSearchFormData'] !== null ? $options['sessionSearchFormData']['bigcity'] : '';
$category = $options['sessionSearchFormData'] !== null ? $options['sessionSearchFormData']['category'] : '';
$builder
->add('bigcity', EntityType::class, [
'class' => BigCity::class,
'choice_label' => 'name',
'placeholder' => 'Sélectionne une grande ville',
'data'=> $bigcity !== null ? $this->entityManager->getRepository(BigCity::class)->find($bigcity) : '',
])
->add('category', EntityType::class, [
'class' => Categories::class,
'choice_label' => 'image',
'expanded' => true,
'multiple' => false,
'data'=> $category !== null ? $this->entityManager->getRepository(Categories::class)->find($category) : '',
])
->add('save', SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
'sessionSearchFormData' => null,
]);
}
}
uj5u.com熱心網友回復:
錯誤在這里
{% block title %}Liste des activités {{ category.title }} à {{ bigcity.name }}{% endblock %}
當您說 {{ category.title }} 或 {{ bigcity.name }} 時,這意味著您呼叫了一個變數類別,并且基本上(不是總是)變數在控制器中宣告并傳遞給 view 以回傳 render ...
在您的情況下,您將變數類別稱為物件,變數類別和物件都不存在,那么 twig 將如何知道它們?
第二件事,類別可能作為引數存在于 url 中,但不作為完整物件存在,我猜是類別的 id(例如 &category=5&...)
所以你應該做的是在事件函式中檢索這個引數,如果它存在,那么你必須從資料庫中選擇具有這個id的類別,或者如果你只需要他的名字就選擇他的名字,然后你傳遞這個變數回傳渲染和如果存在,不要忘記做一些測驗以免出錯
#[Route('/events', name: 'events')]
public function events(Request $request, EventsRepository $eventsRepository, CategoriesRepository $categoriesRepository)
{
$data = $request->request->all();
$events = $eventsRepository->findAll();
$categories = $categoriesRepository->findAll();
$category = null;
if($request->query->has('category'))
{
$categoryId = $request->query->get('category');
// or
// $categoryId = $data['category'];
$category = $categoriesRepository->find($categoryId);
}
return $this->render("front/events.html.twig", [
'data' => $data,
'events' => $events,
'categories' => $categories,
'category' => $category // pass category to view
]);
}
{% if category is not null %}
{% block title %}Liste des activités {{ category.title }} à {{ bigcity.name }}{% endblock %}
{% endif %}
uj5u.com熱心網友回復:
我終于在這里得到了令人滿意的解決方案:
事件控制器.php
<?php
namespace App\Controller\Front;
use App\Form\SearchType;
use App\Repository\BigCityRepository;
use App\Repository\EventsRepository;
use App\Repository\CategoriesRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class EventsController extends AbstractController
{
#[Route('/search', name: 'search')]
public function search(
Request $request,
SessionInterface $sessionInterface,
EventsRepository $eventsRepository,
){
$data = $request->request->all();
$sessionSearchFormData = $sessionInterface->get('searchFormData');
$form = $this->createForm(SearchType::class, ['data' => $sessionSearchFormData]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$sessionInterface->set('searchFormData', $data);
$events = $eventsRepository->findAll();
return $this->render("front/events.html.twig", [
'bigcity'=> $form->get('bigcity')->getData(),
'category'=> $form->get('category')->getData(),
'events' => $events
]);
}
return $this->renderForm('front/search.html.twig', [
'form' => $form,
]);
}
}
uj5u.com熱心網友回復:
鎖定5小時。對此答案的評論已被禁用,但它仍在接受其他互動。了解更多。這是我當前的代碼。我想做的就是傳遞$data來自搜索表單的值。我相信有一個解決方案來做到這一點......非常感謝。
事件控制器.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 EventsController extends AbstractController
{
#[Route('/search', name: 'search')]
public function search(
Request $request,
SessionInterface $sessionInterface,
){
$data = $request->request->all();
$sessionSearchFormData = $sessionInterface->get('searchFormData');
$form = $this->createForm(SearchType::class, ['data' => $sessionSearchFormData]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$sessionInterface->set('searchFormData', $data);
$dataRequest = [
'bigcity'=> $form->get('bigcity')->getData() ,
'category'=> $form->get('category')->getData()
];
$queryStringParameters = http_build_query($dataRequest);
$url = $this->generateUrl("events").'?'.$queryStringParameters;
return $this->redirect($url);
}
return $this->render('front/search.html.twig', [
'form' => $form->createView()
]);
}
#[Route('/events', name: 'events')]
public function events(
EventsRepository $eventsRepository,
){
$events = $eventsRepository->findAll();
return $this->render("front/events.html.twig", ['events' => $events]);
}
}
search.html.twig檔案
{% extends 'base.html.twig' %}
{% block title %}Liste des sorties et des activités !{% endblock %}
{% block main %}
{{ form_start(form) }}
<p>Où souhaites-tu faire une sortie ou une activité ?</p>
{{ form_widget(form.bigcity) }}
<p>Quel type de sortie ou d’activité t’intéresse ?</p>
{{ form_widget(form.category) }}
{{ form_widget(form.save, {'label': 'Je valide') }}
{{ form_end(form) }}
</div>
{% endblock %}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/512815.html
標籤:形式交响乐变量控制器
下一篇:微服務架構 | 服務架構的演進
