2014-04-22 5 views
1

사용자를 특정 페이지로 리디렉션하고 싶습니다. 페이지를 찾을 수 없을 때 symfony2 오류가 발생합니다. symfony2 : 페이지를 찾을 수 없거나 404 오류가 발생하면 사용자를 색인 페이지로 리디렉션합니다.

오류 페이지 메시지의 사용자 정의를 위해 나는
app\Resources\TwigBundle\views\Exception\error404.html.twing 

을 생성하지만 지금은 특정 페이지로 사용자를 리디렉션 할. 어떻게해야합니까?

감사합니다.

+1

당신은 여기에서 기쁨을 발견 할 것이다 -> http://stackoverflow.com/questions/15983082/show-a-specific-route-instead-of-error-page-404-symfony2 – Healkiss

답변

0

.htaccess를 사용해야합니다. this을 참조하십시오.

+0

호입니다 Symfony2는 아파치의 404 에러가 아니다. 그리고 OP는 Apache를 사용하지 않을 수도 있습니다. –

1

예외가 발생할 때 커널이 전달하는 kernel.exception 이벤트를 수신하는 event listener을 생성하려고합니다.

그런 다음 예외가 인스턴스 NotFoundHttpException 인 경우 수신기 내부를 검사하고, 그렇다면 리스너 내부를 선택하여 원하는 페이지로 리디렉션합니다.

<?php 
// src/Acme/DemoBundle/EventListener/AcmeExceptionListener.php 
namespace Acme\DemoBundle\EventListener; 

use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

class AcmeExceptionListener 
{ 
    public function onKernelException(GetResponseForExceptionEvent $event) 
    { 
     // You get the exception object from the received event 
     $exception = $event->getException(); 

     if ($event->getException() instanceof NotFoundHttpException) { 
      $response = new RedirectResponse($url); 
      $event->setResponse($response); 
     } 
    } 
} 

물론, 당신은 이벤트 리스너를 등록해야합니다 :

은 여기 exemple입니다. 그것은 단지 서비스 일 뿐이므로 보통 때처럼 등록해야합니다.

# app/config/config.yml 
services: 
    kernel.listener.your_listener_name: 
     class: Acme\DemoBundle\EventListener\AcmeExceptionListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.exception, method: onKernelException } 
+0

감사합니다. 심포니를 처음 사용하기 때문에 어떻게 등록 할 수 있습니까? – Napster

+0

답안에 예제를 추가했습니다. [문서] (http://symfony.com/doc/current/cookbook/service_container/event_listener.html)는 때로는 매우 유용 할 수 있다는 것을 잊지 마십시오! (내가 포함시킨 예제는 기본적으로 문서의 예제와 같습니다.) –