2013-04-19 20 views
8

Ich bin neu in Symfony (mit Version 2.2) und versuchen, einen benutzerdefinierten Ausnahme-Listener hinzuzufügen. Ich habe die folgenden Links gelesen, kann sie aber nicht zum Laufen bringen.So fügen Sie eine benutzerdefinierte Ausnahme auf symfony2 hinzu

Was ich versuche zu tun, einen benutzerdefinierten Fehler Exception Listener erstellen und es von meinem Controller und Dienstleistungen wie diese,

throw new jsonErrorException('invalid_params'); 

json Zweig Vorlage wie folgt anzuzeigen. (Ich entwickle ein Hintergrundprogramm für meine nativen Smartphone-Anwendungen)

{"status": "error", "message": "invalid_params"} 

Ich habe meine CustomEventListener meiner src/My/Bundle/Ressourcen/config/services.yml und erstellte Klasse eine benutzerdefinierte Ausnahme registriert am folgenden Link (Overriding Symfony 2 exceptions?) gezeigt aber ich habe den Fehler

symfony exceptions must be valid objects derived from the exception base class 

Mache ich hier etwas falsch? Vielen Dank.

Antwort

22

Sie können benutzerdefinierte Ausnahme der „symfony Weg“ lassen Sie uns an, wie Ausnahme oder erstellt in symfony aussehen erstellen:

zuerst erstellen Ihre customExceptionInterface

namespace My\SymfonyBundle\Exception; 
/** 
* Interface for my bundle exceptions. 
*/ 
interface MySymfonyBundleExceptionInterface 
{ 
} 

und erstellen Sie Ihre jsonErrorException

namespace My\SymfonyBundle\Exception; 

class HttpException extends \Exception implements MySymfonyBundleExceptionInterface 
{ 
} 

Zögern Sie nicht, symfony's exceptions Codebeispiele auf Github

+0

Vielen Dank für Ihre Hilfe! Ich bin fast da, aber ich kann nicht herausfinden, wie man eine benutzerdefinierte Zweigvorlage rendert. (Ich brauche keinen Zweig, da es kein langer Text ist, aber ich bevorzuge es) –

+0

oder vielleicht eine Möglichkeit, die Standard-Zweig-Vorlage zu rendern ... –

+1

[Zweig-Konfiguration] (http: // symfony .com/doc/current/reference/configuration/twig.html # config-twig-exception-controller) um das Rendern der Standard-Zweigvorlage zu stoppen. –

0

Sie haben die Exception-Klasse zu erweitern, oder zumindest die innere Ausnahme Klasse Symfony

2

ich vor kurzem eine benutzerdefinierte Ausnahme in meinem Symfony2 Service auf folgende Weise umgesetzt: die

MemberAlreadyExistsException.php

<?php 

namespace Aalaap\MyAppBundle\Services\Membership; 

class MemberAlreadyExistsException extends \Exception 
{ 

} 

Subscriber.php

<?php 

namespace Aalaap\MyAppBundle\Services\Membership; 
... 
throw new MemberAlreadyExistsException(
    'The member you are trying to subscribe already' 
    . ' exists in this list.' 
); 
... 
+0

Schnell und einfach. – crafter

0

Ich musste nurhinzufügenund der globale Bereich arbeitete in einem Symfony-Service

namespace App\CoreBundle\Service; 

class CurrencyExchange 
{ 
    const RATES_XML = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?849b4b329863b2d60bfd0de486e423c9'; 

    const RATES_XML_PATH = 'uploads/ecb_currencies.xml'; 

    /** @var array $rates */ 
    private $rates; 

    public function __construct() 
    { 
     if (!is_file(self::RATES_XML_PATH)) { 
      throw new \Exception('XML '.self::RATES_XML_PATH.' does not exists.'); 
     } 

     if (1 > filesize(self::RATES_XML_PATH)) { 
      throw new \Exception('XML '.self::RATES_XML_PATH.' is empty.'); 
     } 
Verwandte Themen