我使用Symfony 4.4。我在我的Twig模板中有一个返回按钮。
{% if previousPageboolean == false %}
<a class="d-block text-decoration-none cursor px-4 pt-3" href="{{app.request.headers.get('referer')}}"><img src="{{ asset('build/images/back.svg')}}" class="height-19"></a>
{%else%}
<a class="d-block text-decoration-none cursor px-4 pt-3" href="{{referer}}"><img src="{{ asset('build/images/back.svg')}}" class="height-19"></a>
{% endif %}
但我有一个问题。它的工作,但在这个模板中,我有2个表单。当我点击这些按钮的提交按钮时,Flash消息会弹出并重新加载页面。因此,当页面重新加载时,返回按钮的路线会发生变化,它是自己的页面。
主计长
/**
* @Route("/receta/{title}", name="recipe_show", methods={"GET"})
* @Route("/receta/{title}", name="recipe_show")
*/
public function show(Recipe $recipe,RecipeRepository $recipeRepository,ScoreRepository $scoreRepository,CommentRepository $commentRepository, Request $request): Response
{
$comment = new Comment();
$score = new Score();
$comment_form = $this->createForm(CommentType::class, $comment);
$comment_form->handleRequest($request);
$score_form = $this->createForm(ScoreType::class, $score);
$score_form->handleRequest($request);
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
$referrer="";
$previousPageboolean =false;
if ($score_form->isSubmitted() && $score_form->isValid()) {
$previousPageboolean =true;
$referrer = $request->get('referrer');
$score_value = $score_form->get("score")->getData();
$isScore = $scoreRepository->findBy(array('user' => $user , 'recipe' => $recipe->getId()));
if($isScore == [] ){
$score->setScore($score_value);
$score->setRecipe($recipe);
$score->setUser($user);
$entityManager->persist($score);
$entityManager->flush();
$this->addFlash('success', '¡Puntuación registrada con exito!');
return $this->redirectToRoute($request->getUri(), [
'referrer' => $this->generateUrl($request->attributes->get('_route'),
array_merge(
$this->request->atrributes->get('_route_params'),
$this->request->query->all
),
),
]);
}else{
$this->addFlash('danger', 'Ya existe una puntuación registrada para esta receta con este usuario.');
return $this->redirect($request->getUri());
}
}
if ($comment_form->isSubmitted() && $comment_form->isValid()) {
$parentid = $comment_form->get("parent")->getData();
if($parentid != null){
$parent = $entityManager->getRepository(Comment::class)->find($parentid);
}
$comment->setVisible(1);
$comment->setParent($parent ?? null);
$comment->setUser($user);
$comment->setRecipe($recipe);
$comment->setCreatedAt(new DateTime());
$entityManager->persist($comment);
$entityManager->flush();
$this->addFlash('success', '¡Comentario registrado con exito!');
return $this->redirect($request->getUri());
}
$comments = $commentRepository->findCommentsByRecipe($recipe);
return $this->render('recipe/show/show.html.twig', [
'recipe' => $recipe,
'score_form' => $score_form->createView(),
'comment_form' => $comment_form->createView(),
'comments' => $comments,
'referrer' => $referrer,
'previousPageboolean' => $previousPageboolean
]);
}
最好不要将路线名称放在后退按钮中,因为路线需要类别参数,而一个配方可以有多个类别。
recipe表没有category属性,因为我有一个recipes_categories表,它在recipe表和category表之间具有M:M关系。
2条答案
按热度按时间68bkxrlz1#
不知道这是否与您的问题有关,但我认为您的控制器中有一个打字错误:如果您有一个请求,那么您可以使用这个请求来创建一个数组。
daolsyd02#
我能想到的一个解决方法是将referer作为查询参数传递,并将其包含在twig文件中。
如果您从twig重定向到当前控制器:
如果您使用RedirectResponse进行重定向:
控制器:
小枝: