#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), я прокомментировал это и решил, я надеюсь, что этот ответ может помочь кому-то еще