web-dev-qa-db-ja.com

symfony2および例外エラーをスロー

私は例外をスローしようとしていますが、次のことをしています:

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

次に、それらを次の方法で使用します。

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

しかし、HttpNotFoundExceptionが見つからないなどのエラーが発生しています.

これは例外をスローする最良の方法ですか?

21
jini

試してください:

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

そして

throw new NotFoundHttpException("Page not found");

私はあなたがそれを少し逆にしたと思う:-)

49
Chris McKinnel

任意のコントローラーで、これを404 Symfony内のHTTP応答に使用できます

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

と同じ

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

または、これは500 HTTP応答コード

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

と同じ

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

または

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

または、これはあらゆるタイプのエラー用です

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

また...カスタム例外このURLをフローできます

31
HMagdy

コントローラー内にある場合は、次の方法で実行できます。

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

コントローラで、あなたは単にすることができます:

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

    // ...
}

この状況では、use Symfony\Component\HttpKernel\Exception\HttpNotFoundException;を上部に含める必要はありません。その理由は、コンストラクタを使用するように、クラスを直接使用していないためです。

コントローラーの外側、クラスがどこにあるかを示し、通常のように例外をスローする必要があります。このような:

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

// ...

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

または

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

// ...

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