У меня возникли проблемы с перенаправлением после определенной функции, которая отправляет электронные письма! Моя функция:
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
- в C: \ path \ to \ webroot \ Symfony \ app \ cache \ dev \ classes.php строка 3899
- в ErrorHandler-> handle ('2', 'Header может содержать не более одного заголовка, новую обнаруженную строку', 'C: \ path \ to \ webroot \ Symfony \ app \ cache \ dev \ classes.php', ' 3899 ', массив (' this '=> object (RedirectResponse),' name '=>' Location ',' values '=> array (' / app_dev.php / blog ', object (ResponseHeaderBag),' Перенаправление в / app_dev .php / blog Перенаправление на /app_dev.php/blog . ',' 1.0 ',' 302 ',' Found ', null),' value '=> object (ResponseHeaderBag)))
- at header ('Location: Cache-Control: no-cache Дата: ср, 17 июл 2013 11:56:17 GMT Местоположение: /app_dev.php/blog, false) в C: \ path \ to \ webroot \ Symfony \ app \ cache \ dev \ classes.php строка 3899
- в Response-> sendHeaders () в папке C: \ path \ to \ webroot \ Symfony \ app \ cache \ dev \ classes.php строка 3914
- в Response-> send () в папке C: \ path \ to \ webroot \ Symfony \ web \ app_dev.php 27
в то время как я ничего не изменил о каких-либо «заголовках» (и не знаю, что это такое!). Мой 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 в своем URL-адресе!
Я НЕ знаю, что это за ошибка и как я должен это исправить!
Чтобы быть детальным, ваша проблема заключалась в возвращаемом значении $this->newpostAction()
. Обычно это объект Response
. Но перенаправление ожидает uri / route, который может быть отправлен клиенту через заголовок Location
. Переадресация всегда происходит на стороне клиента. Но вы можете использовать ->forward('AcmeBundle:Demo:index')
для пересылки внутри другого действия контроллера. В этом случае URL-адрес клиента не изменяется.
Вы вызываете проверку безопасности Symfony. При отправке заголовков с header()
теоретически вы можете отправить много заголовков с одним вызовом функции. Symfony предотвращает случайное выполнение этого при передаче чего-либо с символом новой строки в качестве целевого URL.