2014-09-20 54 views
4

我正在使用Sliex框架。當我使用\Silex\Application::redirect方法時,我遇到了重定向問題。我發現,當我試圖通過http-headers重定向時,而不是symfony「發送」響應似乎稱爲__toString方法。Symfony響應對象如何設置http標頭?

這是我的捲曲輸出:

bash-4.2$ curl -v http://127.0.0.1:8082/ 
* About to connect() to 127.0.0.1 port 8082 (#0) 
* Trying 127.0.0.1... 
* Adding handle: conn: 0x1ea0970 
* Adding handle: send: 0 
* Adding handle: recv: 0 
* Curl_addHandleToPipeline: length: 1 
* - Conn 0 (0x1ea0970) send_pipe: 1, recv_pipe: 0 
* Connected to 127.0.0.1 (127.0.0.1) port 8082 (#0) 
> GET/HTTP/1.1 
> User-Agent: curl/7.32.0 
> Host: 127.0.0.1:8082 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Date: Sat, 20 Sep 2014 08:02:52 GMT 
* Server Apache/2.4.10 (Fedora) PHP/5.5.15 is not blacklisted 
< Server: Apache/2.4.10 (Fedora) PHP/5.5.15 
< X-Powered-By: PHP/5.5.15 
< Set-Cookie: PHPSESSID=*****; path=/ 
< Content-Length: 116 
< Content-Type: text/html; charset=UTF-8 
< 
HTTP/1.0 302 Found 
Cache-Control: no-cache 
Date:   Sat, 20 Sep 2014 08:02:52 GMT 
Location:  /login 

* Connection #0 to host 127.0.0.1 left intact 

我不明白爲什麼,但它呼應的HTTP報頭。

UPDATE

我的腳本是這樣的:

<?php class Contorller { 
    public action(\Silex\Application $app){ 
     return $app->redirect('/login'); 
    } 
} 

路由腳本:

<?php 
$core = new \Silex\Application; 
$core->get("/another/action", "\\Controller::action") 
$core->match("/login","\\AnotherController::login")->method('POST|GET'); 

登錄動作有沒有邏輯,它只是呈現一根樹枝模板。

+0

你的php腳本是怎樣的? – 2014-09-20 08:28:06

+0

您可以添加路由指令和登錄控制器嗎? – Fractaliste 2014-09-24 11:01:07

回答

1

調用$ APP->重定向()返回直接取自Symfony Response Object Documentation

要設置的Symfony響應對象標題使用以下的302

默認狀態的新RedirectResponse對象headers->set方法。

use \Symfony\Component\HttpFoundation\RedirectResponse; 

class Controller { 
    public function action(\Silex\Application $app){ 

     $response = new RedirectResponse('/login', 302); 

     // the headers public attribute is a ResponseHeaderBag 
     $response->headers->set('Content-Type', 'text/plain'); 

     return $response; 
    } 
} 

一旦方法名稱中的拼寫錯誤得到糾正(控制器更改爲控制器),您的代碼就可以正常工作。

class Controller { 
    public function action(\Silex\Application $app){ 
     return $app->redirect('/login', 302); 
    } 
} 

class AnotherController { 
    public function login(\Silex\Application $app){ 
     return new Response($app['twig']->render('blank.html.twig')); 
    } 
} 

$app->get("/another/action", "\Controller::action"); 
$app->match("/login","\AnotherController::login")->method('POST|GET');