0

これを行うために非常に多くの方法を見てきましたが、解決策が見つかりません。

例外が発生したときに、サイトに特定のルート/ページを表示したい.

したがって、ルート「contact」を表示するように設定し、domain.com/dfergerxyttt に移動すると (ルートが見つかりません)、domain.com/route に移動した場合と同じになります (404 ステータスを除く)。コード)。

ただし、これらの重要なことが必要です: (1) 通常どおりコントローラー コードを実行するために必要です (2) Request イベント リスナー コードも実行するために必要です

1 つの特定のテンプレートを表示するように設定することはできません。それは request-event-listener や controller などのプロセス全体である必要があります。

例外リスナーを試しましたが、リクエスト リスナーも実行されませんでした。そのコードはすべて無視されました。

キャッチオールルートなどを設定する方法がわかりません。デフォルトまたはキャッチオール ルートを設定することをお勧めします。

--

これを試しましたが、コントローラーにアクセスできません。それを注入する必要があるかどうかはわかりません:

namespace etc...

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Bundle\TwigBundle\Controller\ExceptionController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\Exception\FlattenException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpFoundation\Response;

class MyExceptionController extends ExceptionController
{
    public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null, $format = 'html')
    {

       $httpKernel = $this->container->get('kernel');
       $response = $httpKernel->forward('AcmeMyBundle:Default:pageAction');
       $this->setResponse(new Response($response));

    }
}

私もこれを services.yml で行いましたが、これは正しいようです:

parameters:
    twig.controller.exception
      class: Acme\MyBundle\MyExceptionController
4

1 に答える 1

0

例外コントローラーを作成Controller::forwardし、特定のルートに転送するために使用します。

2.2 で例外コントローラーを作成する方法については、この回答を参照してください: https://stackoverflow.com/a/15773923/1149495

于 2013-04-14T16:34:01.113 に答える