警告:session_id():已发送标题后无法更改会话ID
我的项目有一个困难的问题。在Local主机环境中,一切都很好,但是在Heroku上部署后,我有一个错误作为记录用户的错误:
在渲染模板的渲染过程中已抛出了一个例外(“警告:Session_ID():在已经发送了标题后无法更改会话ID ”)。
问题仅在餐厅和评论树枝文件上。恢复用户登录检查({%如果app.user%})之后,一切都很好,但是我在项目中需要这样的选项。
Twig\Error\
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 użytkownika</a>
{% endif %}
<a class="nav-link" href="/#aboutus">O nas</a>
<a id="login__button" class="nav-link" href="/{{app.user ? 'wyloguj' : 'logowanie'}}"
@click="isOpen = false">
链接到我的项目: https://restrank.herokuapp.com/
链接到repository: https://github.com/grzegorzwanat95/restrank
shpgq.png“ rel =“ nofollow noreferrer”>在此处输入图像描述
我将感谢我的帮助。我花了很多时间来修复它,但我没有想法。我看到这是PHP中常见的问题,但是修复程序与Symfony 6不起作用。
更新:
我注意到错误与控制器功能连接,其中显示了按名称或城市搜索的餐馆列表。在LocalHist Server中,它有效,但是部署从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搜索传递参数并避免此错误。
I have a difficult problem with my project. In localhost environment everything works good, but after deploying on heroku I have an error as logged user:
An exception has been thrown during the rendering of a template ("Warning: session_id(): Session ID cannot be changed after headers have already been sent").
The problem is only on restaurant and comments twig files. After remowing user login check ({% if app.user %} ) everything works fine, but I need such options in my project.
Twig\Error\
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 użytkownika</a>
{% endif %}
<a class="nav-link" href="/#aboutus">O nas</a>
<a id="login__button" class="nav-link" href="/{{app.user ? 'wyloguj' : 'logowanie'}}"
@click="isOpen = false">
Link to my project: https://restrank.herokuapp.com/
Link to repository: https://github.com/GrzegorzWanat95/RestRank
I would be grateful for help. I have spend a lot of time to fix it, but I don't have idea. I saw that it was a common problem in PHP, but fixes don't work with Symfony 6.
Update:
I have notice that error is connected with controller function which display list of restaurants searched by name or city. In localhist server it works but after deployment fetching parameters from URL cause error.
Code of my controller which cause error after user login:
#[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;
}
}
I don't know how to pass parameters from search by URL and avoid this error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
该错误是由餐厅控制器中的转储功能引起的。
删除它后,一切正常。应该是:
The error was caused by dump function in restaurant controller.
After removing it everything works ok. It should be: