web-dev-qa-db-fra.com

symfony2 et erreur d'exception

J'essaie de lancer des exceptions et je fais ce qui suit:

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

Je les utilise ensuite de la manière suivante:

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

cependant, je reçois des erreurs comme HttpNotFoundException introuvable, etc.

Est-ce la meilleure façon de lancer des exceptions?

20
jini

Essayer:

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

et

throw new NotFoundHttpException("Page not found");

Je pense que vous avez un peu en arrière :-)

49
Chris McKinnel

dans n'importe quel contrôleur, vous pouvez utiliser ceci pour la réponse 404 HTTP dans Symfony

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

pareil que

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

ou ceci pour 500 code de réponse HTTP

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

pareil que 

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

ou

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

ou c'est pour tout type d'erreur

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

Aussi ... Pour Custom Exceptionvous pouvez indiquer cette URL

28
HMagdy

Si c'est dans un contrôleur, vous pouvez le faire de cette façon: 

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

Dans le contrôleur , vous pouvez simplement faire:

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');

    // ...
}

Dans cette situation, il n'est pas nécessaire d'inclure le use Symfony\Component\HttpKernel\Exception\HttpNotFoundException; en haut. La raison en est que vous n'utilisez pas directement la classe, comme si vous utilisiez le constructeur.

En dehors du contrôleur , vous devez indiquer où la classe peut être trouvée et lever une exception comme vous le feriez normalement. Comme ça:

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

// ...

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

ou

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

// ...

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