ErrorException:警告:标头不能包含多个标头,检测到新行


ErrorException: Warning: Header may not contain more than a single header, new line detected

我在执行某个发送电子邮件的功能后重定向遇到问题!我的功能是:

public function emailAction($emails, $url)
{
    foreach($emails as $email)
    {
        $message = 'Swift_Message::newInstance()
            ->setSubject('Updates in Symfony Blog')
            ->setFrom(array('blog@symfonyblog.com' => 'Symfony Blog'))
            ->setTo($email["email"])
            ->setBody(
            $this->renderView(
                'NEWSBlogBundle:Default:email.txt.twig',
                array('url' => $url)
            )
        )
        ;
        $this->get('mailer')->send($message);
    }
    return $this->redirect($this->newpostAction());
    //return $this->redirect($this->generateUrl('NEWSBlogBundle_homepage'));
}

它可以发送电子邮件,但在重定向时,会出现错误:

ErrorException:警告:标头不能包含多个标头,在C:''path''to''webroot''Symfony''app''cache''dev''classes.php行3899 中检测到新行

  1. 在C:''path''to''webroot''Symfony''app''cache''dev''classes.php行3899
  2. 在ErrorHandler->handle('2','Header可能不包含多个Header,检测到新行','C:''path''to''webroot''Symfony''app''cache''dev''classes.php','3899],array('this'=>object(RedirectResponse),'name'=>'Location','values'=>array('./app_dev.php/blog',object(ResponseHeaderBag),'重定向到/app_dev.php/blogg',重定向到/app.dev.php/blog.','1.0','302','Found',null),'value'=>对象(ResponseHeaderBag))
  3. 在C:''path''to''webroot''Symfony''app''Cache''dev''classes.php行3899的标题处("位置:缓存控制:无缓存日期:2013年7月17日星期三11:56:17 GMT位置:/app_dev.php/blog",false)
  4. 在C:''path''to''webroot''Symfony''app''cache''dev''classes.php中的Response->sendHeaders()行3914
  5. 在C:''path''to''webroot''Symfony''web''app_dev.php第27行的响应->send()处

而我对任何"标题"都没有做任何更改(我真的不知道它是关于什么的!)。我的app_dev.php是:

<?php
use Symfony'Component'HttpFoundation'Request;
if (isset($_SERVER['HTTP_CLIENT_IP'])
    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
    || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1'))
) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();
Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

我尝试了两种不同的重定向方式(通过路由和直接调用控制器),它们都会出现相同的错误,而如果我输入页面的url,页面就会加载!

我不知道这个错误是什么,也不知道该如何修复!

详细地说,您的问题是$this->newpostAction()的返回值。通常它是一个Response对象。但是重定向需要一个uri/路由,它可以通过Location头发送到客户端。重定向始终是客户端的转向。但是您可以使用->forward('AcmeBundle:Demo:index')在内部转发到另一个控制器操作。在这种情况下,客户端上的URL不会更改。

您触发Symfony的健全性检查。当使用header()发送标头时,理论上您可以通过一个函数调用发送大量标头。Symfony可以防止您在传递以换行符作为目标URL的内容时意外执行此操作。