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

时间:2013-07-17 12:03:47

标签: php redirect symfony

在发送电子邮件的某个功能后,我无法重定向! 我的职责是:

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 \到\ webroot \ Symfony \ app \ cache \ dev \ classes.php第3899行检测到新行

     
      
  1. 在C:\ path \ to \ webroot \ Symfony \ app \ cache \ dev \ classes.php第3899行
  2.   
  3. 在ErrorHandler->句柄('2','标题可能不包含多个标题,检测到新行','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/blog重定向到/app_dev.php/blog。','1.0','302','找到',null),'value'=> object(ResponseHeaderBag)))
  4.   
  5. at C :: \ path \ to \ webroot中的标题('Location:Cache-Control:no-cache Date:Wed,17 Jul 2013 11:56:17 GMT Location:/app_dev.php/blog',false) \ Symfony \ app \ cache \ dev \ classes.php第3899行
  6.   
  7. at Response-> sendHeaders()在C:\ path \到\ webroot \ Symfony \ app \ cache \ dev \ classes.php第3914行
  8.   
  9. at Response->发送()在C:\ path \到\ webroot \ Symfony \ web \ app_dev.php第27行
  10.   

虽然我没有改变任何关于任何“标题”的东西(并且真的不知道它是什么!)。我的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);

我尝试了两种不同的方法来重定向(通过路由和直接调用控制器),这两种方法都会产生相同的错误,而如果我jusr输入了他们的网址,页面会加载!

我不知道这个错误是什么以及我应该如何修复它!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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