Nginx中控制器中的函数错误,但对于apache2来说可以

时间:2019-08-29 17:35:05

标签: symfony nginx symfony4

我是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' );
}

1 个答案:

答案 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 }