2012-05-16 14 views
17

Ich versuche, Ausnahmen zu werfen und ich tue das folgende:Symfony2 und werfen Ausnahmefehler

use Symfony\Component\HttpKernel\Exception\HttpNotFoundException; 
use Symfony\Component\Security\Core\Exception\AccessDeniedException; 

ich sie dann die folgende Art und Weise unter Verwendung von:

throw new HttpNotFoundException("Page not found"); 
    throw $this->createNotFoundException('The product does not exist'); 

aber ich bin immer Fehler wie HttpNotFoundException nicht gefunden usw.

Ist dies der beste Weg, Ausnahmen zu werfen?

+1

Es ist normal, sie als Ihr erstes Beispiel zu werfen, werfen neue Exception ('Message'); Solange Sie die Ausnahmeklasse importiert haben, wie Sie es anscheinend mit einer use-Anweisung getan haben, sollte es funktionieren. Möglicherweise mehr, was Sie nicht zeigen - können Sie Ihre tatsächlichen Klassenheader und Exception-Stack-Trace veröffentlichen? – PorridgeBear

+0

Fehler Ich bekomme ist: Schwerwiegender Fehler: Klasse 'Rest \ UserBundle \ Controller \ HttpNotFoundException' nicht in /Users/jinni/Sites/symfony.com/src/Rest/UserBundle/Controller/DefaultController.php – jini

+0

Ich habe Verwendung Symfony enthalten \ Component \ HttpKernel \ Exception oben – jini

Antwort

45

Versuchen:

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

und

throw new NotFoundHttpException("Page not found"); 

Ich glaube, Sie haben es nach hinten ein wenig :-)

+0

dank Chris ... – jini

+0

dank @ Chris arbeitete wie ein Charme – Stevanicus

+0

Es ist nicht 404-Status sendet – Volatil3

9

Wenn seine in einem Controller, können Sie es auf diese Weise tun:

throw $this->createNotFoundException('Unable to find entity.'); 
25

in irgendeiner Kontrolle ler können Sie dies innerhalb Symfony für 404 HTTP-Antwort verwenden

throw $this->createNotFoundException('Sorry not existing'); 

gleiche wie

throw new NotFoundHttpException('Sorry not existing!'); 

oder diese für 500 HTTP-Antwortcode

throw $this->createException('Something went wrong'); 

gleiche wie

throw new \Exception('Something went wrong!'); 

oder

//in your controller 
$response = new Response(); 
$response->setStatusCode(500); 
return $response; 

oder ist dies für jede Art von Fehler

throw new Symfony\Component\HttpKernel\Exception\HttpException(500, "Some description"); 

Auch ... Für Angepasste Exceptionyou can flow this URL

+1

besser .. nuff said. – JohnnyQ

+2

@ Hassan-Magdy, ich kann die Methode "createException (...)" in Symfony 2.3, 2.7 oder 3.0 in keiner Klasse finden. Bist du sicher, dass es funktioniert? –

+0

@NunoPereira Die beste Lösung sollte eine neue [HTTPException] (http://api.symfony.com/3.2/Symfony/Component/HttpKernel/Exception/HttpException.html#method___construct) werfen, wie im letzten Beispiel oben beschrieben. – sentenza

0

In der Steuerung, können Sie einfach tun:

public function someAction() 
{ 
    // ... 

    // Tested, and the user does not have permissions 
    throw $this->createAccessDeniedException("You don't have access to this page!"); 

    // or tested and didn't found the product 
    throw $this->createNotFoundException('The product does not exist'); 

    // ... 
} 

In diesem Fall müssen Sie use Symfony\Component\HttpKernel\Exception\HttpNotFoundException; nicht oben einfügen. Der Grund dafür ist, dass Sie die Klasse nicht direkt verwenden, wie zum Beispiel den Konstruktor.

Außerhalb des Controllers müssen Sie angeben, wo die Klasse gefunden werden kann, und eine Ausnahme auslösen, wie Sie es normalerweise tun würden.Wie folgt aus:

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

// ... 

// Something is missing 
throw new HttpNotFoundException('The product does not exist'); 

oder

use Symfony\Component\Security\Core\Exception\AccessDeniedException; 

// ... 

// Permissions were denied 
throw new AccessDeniedException("You don't have access to this page!");