2013-01-10 96 views
0

我試圖重定向Symfony到另一條路線/404如果有404錯誤。在ExceptionController.php文件中,我正在查找錯誤代碼404.出現錯誤404時,重定向到my-domain.com/404。我想將我的用戶重定向到另一個404頁面,因爲我的自定義404頁面來自另一個包。Symfony 2 - 重定向()指定頁面

下面是我寫的代碼。當我訪問一個不存在的網站時,我會看到一個500服務器錯誤頁面,而不是我預期的重定向404頁面。我錯過了什麼嗎?

if ($code == '404') { 
    return $this->redirect("/404"); 
} 
+0

你看着[這](http://symfony.com/doc返回自定義響應中心網站廣泛之一app/Resources/views/Exception/error404.html.twig

發現/master/cookbook/controller/error_pages.html)? – Squazic

+0

@Squazic Yup,我看過那個。 Symfony是我的第一個框架,我剛剛說過最近的工作。我仍然困惑並閱讀文檔。我正在查看重定向部分(http://symfony.com/doc/current/book/controller.html)以獲取指導。 – Jon

+0

@Squazic我可以根據您發佈的指南創建自定義錯誤頁面。但是,我需要將此自定義404頁面放在我的網站的另一部分。這就是爲什麼我正在考慮將用戶重定向到'/ 404'。 – Jon

回答

2

我已經看看,並且據我所知在 包內不可能有錯誤頁面。它必須然而,你可以通過利用HttpFoundation組件

<?php 

namespace Acme\WhateverBundle\Controller; 

//... 
use Symfony\Component\HttpFoundation\Response; 

class MyController extends Controller 
{ 
    //... 
    public function takeAction() 
    { 
     //.. 

     if ($notFound) { 
      $twig = $this->container->get('templating'); 

      $content = $twig->render('AcmeAnotherBundle:Exception:error404.html.twig'); 

      return new Response($content, 404, array('Content-Type', 'text/html')); 
     } 

     // ... 

     return $this->render('AcmeWhateverBundle:Default:index.html.twig'); 
    } 
} 
+0

看看http:// stackoverflow。com/questions/14269731/symfony-2-can not find-forward – Jon

+0

看看你的代碼,我將如何將它集成到現有的'symfony/symfony/src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.php'中? – Jon

+0

我認爲在我的另一篇文章中,我正在向你的方向發送一個自定義響應,使用'forward()'將用戶透明地重定向到404頁面。這種方法是否會繞過一個事實,即錯誤頁面不能存在於一個包中,而必須是網站範圍內的? – Jon

1

您可以嘗試使用的Symfony的createNotFoundException()方法:

http://symfony.com/doc/2.0/book/controller.html#managing-errors-and-404-pages

不是重定向到一個404頁的,試試這個在您的控制器:

throw $this->createNotFoundException('This page does not exist.'); 
+0

當我拋出異常時,代碼如何知道要顯示哪個錯誤頁面?對不起,我仍然很困惑,並且對框架,php,symfony等都很陌生。 – Jon

+0

該特定異常將引發404錯誤。然後,您可以按照Squazic的建議自定義404錯誤頁面(和其他錯誤頁面)。如果你是PHP新手,學習symfony2是一項相當艱鉅的任務。這聽起來像你做得很好,但請記住,即使有經驗的PHP開發人員,symfony也有一個學習曲線,更不用說一個新的。 – Mike

+0

@ icu222much Symfony2功能非常強大,並有自己的算法來自動找到正確的錯誤頁面,[如本節所述](http://symfony.com/doc/2.0/cookbook/controller/error_pages.html#customizing -the-404-page-and-other-error-pages),只要命名正確即可。你甚至可以使用json而不是html來代替404,如果你使用jQuery來對你的Symfony應用程序進行AJAX調用,你會使用它。 –