2017-09-07 3 views
-1

심포니가 내 맞춤 노멀 라이저를 무시하는 이유는 무엇입니까?symfony 3.3.8 맞춤 노멀 라이저 무시

SRC/AppBundle/시리얼/노멀/ExceptionNormalizer.php

<?php 

namespace AppBundle\Serializer\Normalizer; 

use Symfony\Component\Serializer\Normalizer\NormalizerInterface; 

/** 
* Class ExceptionNormalizer 
*/ 
class ExceptionNormalizer implements NormalizerInterface 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function normalize($object, $format = null, array $context = array()): array 
    { 
     return []; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function supportsNormalization($data, $format = null): bool 
    { 
     return $data instanceof \Exception; 
    } 
} 

SRC/AppBundle/자원/설정/services.yml

services: 
    ... 
    app.normalizer.exception: 
     class: AppBundle\Serializer\Normalizer\ExceptionNormalizer 
     tags: 
      - { name: serializer.normalizer } 

응용 프로그램/설정/설정 .yml

imports: 
    - { resource: parameters.yml } 
    - { resource: security.yml } 
    #- { resource: services.yml } exclude default services file 
    - { resource: "@AppBundle/Resources/config/services.yml" } 

예외 출력

{ "오류": { "코드"404, "메시지", "예외" "찾을 수 없음": [{ "메시지": "AppBundle \ 엔티티 \ 사용자 개체가 아닙니다 . 발견 ","클래스 ":"심포니 \ 구성 요소 .....

예상 예외 출력

{}

+0

스택 오버플로에 오신 것을 환영합니다. 게시 가이드 라인을 읽으려면 잠시 시간을내어주십시오. 그러면 부정적인 표를 얻게 될 것입니다. – catbadger

+0

노멀 라이저와 아무런 관련이없는 것처럼 보입니다. 사용자 엔티티가 없습니다. –

+0

@JasonRoman 예외 표준화자가 아니고 사용자 노멀 라이저입니다. 다른 예외 출력을 redifine하려고하지만 예외 정보가있는 동일한 문자열이 있습니다 – andrew357

답변

0

당신은 안 없음 rmalizing 예외. 대신 이러한 종류의 Exception에 대한 리스너를 만들고 처리 (예 : 로그에 기록) 한 다음 원하는 출력을 Response로 반환하십시오.

class ExceptionListener 
{ 
/** @var LoggerInterface */ 
private $logger; 


public function __construct(LoggerInterface $logger) 
{ 
    $this->logger = $logger; 
} 

public function onKernelException(GetResponseForExceptionEvent $event) 
{ 
    $e = $event->getException(); 
    if ($e instanceof ValidationException) { 
     $event->setResponse(new JsonResponse(['error' => $e->getViolations()], 422) 
    } elseif ($e instanceof DomainException) { 
     $this->logger->warning('Exception ' . get_class($e) , ['message' => $e->getMessage()]); 
     $event->setResponse(
     new JsonResponse(['error' => 'Something is wrong with your request.'], 400); 
    } elseif ($e instanceof NotFoundHttpException) { 
     $event->setResponse(new JsonResponse(['error' => 'Not found.'], 404); 
    } else { 
     $event->setResponse(new JsonResponse(['error' => $this->translator->trans('http.internal_server_error')], 500); 
    } 
} 

}

업데이트 services.yml

app.exception_listener: 
    class: Application\Listeners\ExceptionListener 
    arguments: ['@domain.logger'] 
    tags: 
     - { name: kernel.event_listener, event: kernel.exception } 

또한 청취자와 이벤트 당신의 시리얼에 당신이 그것을 등록하지 않았기 때문에 귀하의 노말이 가장 가능성이 무시됩니다

https://symfony.com/doc/current/event_dispatcher.html에 대한 책을 읽은.

+0

감사합니다. 시도해 보겠습니다. – andrew357