Warning: session_id():已经发送了报头后,不能修改会话ID



我的项目遇到了一个难题。在本地主机环境中一切正常,但在heroku上部署后,我有一个错误,作为登录用户:

在呈现模板过程中抛出异常("Warning: session_id(): Session ID不能在已经发送了标头后更改")。

问题只在餐厅和评论小枝文件。删除用户登录检查({% if app.user %})后,一切工作正常,但我需要在我的项目中这样的选项。

TwigError
RuntimeError
in templates/base.html.twig (line 102)
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">                
<span class="navbar-toggler-icon"></span>            
</button>            
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">                
<div class="navbar-nav ms-auto">                
{% if app.user %}                
<a class="nav-link" href="{{ path('app_user_panel') }}">Panel&nbsp;użytkownika</a>
{% endif %}                
<a class="nav-link" href="/#aboutus">O&nbsp;nas</a>                
<a id="login__button" class="nav-link" href="/{{app.user ? 'wyloguj' : 'logowanie'}}"                 
@click="isOpen = false">

链接到我的项目:https://restrank.herokuapp.com/

链接到存储库:https://github.com/GrzegorzWanat95/RestRank

输入图片描述

我很感激你的帮助。我花了很多时间来修理它,但是我没有办法。我发现这在PHP中是一个常见的问题,但是在Symfony 6中修复不起作用。 更新:

我注意到错误与控制器功能有关,该功能显示按名称或城市搜索的餐馆列表。在localhist服务器上,它可以工作,但在部署后从URL获取参数导致错误。

我的控制器在用户登录后导致错误的代码:

#[Route('/szukaj/{type}/{name}', name: 'app_restaurant_query_name', methods: ['GET', 'POST'])]
public function searchByName(RestaurantRepository $restaurantRepository, $type, $name)
{
$values = dump([$type, $name]);
switch ($type){
case 1 :
if($name == null){
return $this->render('restaurant/index.html.twig', [
'restaurants' => $restaurantRepository->findAll(),
]);
}

$restaurants = $restaurantRepository->findBy(
['Name' => $name]
);
return $this->render('restaurant/index.html.twig', [
'restaurants' => $restaurants,
]);
break;
case 2 :
if($name == null){
return $this->render('restaurant/index.html.twig', [
'restaurants' => $restaurantRepository->findAll(),
]);
}
$restaurants = $restaurantRepository->findBy(
['City' => $name]
);
return $this->render('restaurant/index.html.twig', [
'restaurants' => $restaurants,
]);
break;
default: 
return $this->render('restaurant/index.html.twig', [
'restaurants' => $restaurantRepository ->findAll(),
]);
break;
}

}

我不知道如何通过URL传递搜索参数并避免此错误。

饭店控制器中的转储功能导致错误。
删除后一切正常。应该是:

$value = $request->query->get('Type');
$name = $request->query->get('Name');

最新更新