簡體   English   中英

Symfony 2和Twig自定義錯誤頁面

[英]Symfony 2 and Twig custom error page

我放棄。

問題在於覆蓋的Twig 404模板。 通過在/ app / Resources / TwigBundle / views目錄下創建error404.html.twig,以默認方式覆蓋它。

模板本身不包含任何不規則或復雜的邏輯:只是包含一些翻譯文本(| trans)的布局和包含多個鏈接的菜單。

問題是,我無法在此模板中獲取app.user對象(返回為NULL)或當前app.request.locale(始終作為默認語言環境返回)。

我甚至試圖覆蓋twig異常控制器並轉儲當前的語言環境(Request :: getLocale())或獲取用戶 - 結果是相同的 - 默認語言環境和用戶的NULL。

然后我決定深入挖掘並發現了數十個聽眾(語言環境監聽器,異常啟動器......)並嘗試在那里進行調試/修復/測試,但我沒有繼續進行。

順便說一句,我也覆蓋了500錯誤頁面,那里的一切都很好。 好吧,我想當拋出500錯誤(異常)時,symfony已經設置了user / locale / etc,因為它已經到達目標(控制器/動作)並且已經執行了其他偵聽器。 但是在Symfony定位動作之前,會拋出404錯誤(NotFoundHttpException)...

關於項目的一些話:symfony 2.4.8,doctrine,Gedmo extensions / stof bundle,JMS i18n routing bundle。

Symfony版本:v2.4.8 JMS I18n路由包:1.1.1

感謝您的幫助。

這就是我的方式(至少對於404模板):

app / config / routing.yml中附加:

#always in last position
#------------>
nonexistent_route:
    path:     /{url}
    defaults: { _controller: ACMEDemoBundle:Default:wrongRoute}
    requirements:
        url: ".+"    
#<-----------

控制者:

namespace ACME\DemoBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class DefaultController extends Controller
{
    ...

    public function wrongRouteAction($url)
    {
        $user = $this->get('security.context')->getToken()->getUser();

        return $this->render('TwigBundle:Exception:error404.html.twig', array("user" => $user, "url" => $url));

    }
}

在您的twig模板app / Resources / TwigBundle / views / Exception / error404.html.twig中,您可以訪問{{ user }}

您可以在KernelException事件上創建注冊偵聽器,並定義您需要的任何邏輯。 像這樣:

use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;

class YourKernelExceptionListener
{
    public function onKernelExcpetion(GetResponseForExceptionEvent $event)
    {
        // if the exception is instance of Symfony NotFoundHttpException
        // you can do whatever you need and render whatever you need
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM