我是Symfony4的初学者。我在控制器中进行了路由。一切正常。我试图在相同的函数中生成一个cookie。当我在开发人员中使用php bin/console server:run
时,它可以完美工作。当我发送到apache服务器时,它也可以完美工作。但是它会在使用nginx的服务器上发生错误:空白页(在prod中),并且在这种情况下不会创建cookie。你有什么想法吗?
public function HomeRoute(Request $request, Cookie $cookie, Response $response)
{
$request = Request::createFromGlobals();
$mycookie = $request->cookies->get('mycookie');
if($mycookie != 'rgpd'){
$cookie = new Cookie(
'mycookie',
'rgpd',
time() + ( 1 * 365 * 24 * 60 * 60)// Expires 1 year.
);
$res = new Response();
$res->headers->setCookie( $cookie );
$res->send();
}
return $this->render( 'home.html.twig' );
}
答案 0 :(得分:0)
当我使用sendHeaders()时可以;
我不知道为什么,但是它可以那样工作。我也在使用Response Event。比在控制器中添加方法要好。
所以首先,我创建一个类
namespace App\ResponseEvents;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
class Cookme
{
public function onKernelResponse(ResponseEvent $event)
{
$request = Request::createFromGlobals();
$mycook = $request->cookies->get('mycook');
if($mycook != 'rgpd'){
$response = new Response();
$response->headers->setCookie( Cookie::create('mycook', 'rgpd', time() + ( 1 * 365 * 24 * 60 * 60 ) ) );
$response->sendHeaders();
}
}
}
然后,我将这一部分添加到config / services.yaml
App\ResponseEvents\Cookme:
tags:
- { name: kernel.event_listener, event: kernel.response }