. Я получил такого рода ошибку, используя флэш-сообщения в symfony

#php #symfony #session #header

#php #симфония #сессия #заголовок

Вопрос:

вот ошибка:

Не удалось запустить сеанс, так как заголовки уже были отправлены «/var/www/project/vendor/symfony/var-dumper/Dumper/AbstractDumper.php » в строке 176.

Я оставляю здесь свой шаблон и свой контроллер:

 public function create(Request $request)
    {
        
         
        $post = new Post();
        
        $form = $this->createForm(PostType::class, $post);

        
        $form->handleRequest($request);
        if ($form->isSubmitted()) {
            //entity manager
            $em = $this->getDoctrine()->getManager();
            $em->persist($post);
            $em->flush();

            $this->addFlash('success', 'Article Created');

            // $request->getSession()->getFlashBag()->add();
            
            return $this->redirect($this->generateUrl('post.index'));
        }
}
 

вот шаблон:

 {% for message in app.flashes('success') %}
    <div class="alert alert-success" >
      {{ message }}
    </div>
{% endfor %}
 

Я пытаюсь понять, какое отношение этот код имеет к заголовкам или что я могу изменить здесь, но мне нужна помощь.
заранее спасибо

Комментарии:

1. Используете ли вы фреймворк Symfony? Если да, то какая версия фреймворка? Обычно подобные вещи происходят, когда разработчики используют в своем коде такие вещи, как ‘new Session()’ или $ _SESSION вместо того, чтобы позволить фреймворку обрабатывать данные.

2. Да, Symfony v5.2.99 , на данный момент я не настраивал ни одного сеанса.

3. попробуйте очистить все сеансы symfony.com/doc/current/components/http_foundation / … кроме того, попробуйте открыть свой проект в закрытом окне браузера (инкогнито) и посмотреть, существует ли ошибка или нет

4. Я провел быстрый тест, и вспышки работают, как и ожидалось в 5.2. У вас происходит что-то еще. Возможно, настройте новый проект с помощью одного действия контроллера с помощью всего лишь одного флэш-сообщения.

5. Ошибка, которую вы видите, типична для содержимого тела, отправляемого в браузер до того, как вы установите заголовок / flash. Иногда это происходит из-за пробелов в конце файла. В других случаях это происходит потому, что вам нужно установить заголовок раньше.

Ответ №1:

У меня возникла проблема, которая у меня была :

 public function showTitles(PostRepository $postRepository)
    {
        $posts = $postRepository->findAll();
        dump($posts);
        return $this->render('post/index.html.twig', [
            'posts' => $posts
        ]);
    }
    /**
     * @Route("/create",name = "create")
     * @param Request $request
     * @return Response
     */
    public function renderToForm(Request $request)
    {
        $post = new Post();
        $form = $this->createForm(PostType::class, $post);
        $form->handleRequest($request);
        $form->getErrors();
        if ($form->isSubmitted() amp;amp; $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($post);
            $em->flush();
            $estatus="post creado";
            $this->session->getFlashBag()->add("estatus",$estatus);

            return $this->redirect($this->generateUrl('post.index'));

        }
        return $this->render('post/form.html.twig', [
            'form' => $form->createView()
        ]);
    }
 

Проблема заключалась в строке, где я дамп ($post), я прокомментировал это и решил, я надеюсь, что этот ответ может помочь кому-то еще