Вопрос по php, exception, symfony – symfony2 и выдает ошибку исключения

20

Я пытаюсь выбросить исключения и делаю следующее:

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 не найден и т. д.

Это лучший способ выбросить исключения?

Я получаю следующую ошибку: Фатальная ошибка: Class & apos; Rest \ UserBundle \ Controller \ HttpNotFoundException & apos; не найден в /Users/jinni/Sites/symfony.com/src/Rest/UserBundle/Controller/DefaultController.php jini
Я включил использовать Symfony \ Component \ HttpKernel \ Exception сверху jini
Нормально бросать их в качестве первого примера, генерировать новое исключение («сообщение»); Пока вы импортировали класс исключения, как вы, похоже, сделали с оператором использования, он должен работать. Возможно, больше того, что вы не показываете - можете ли вы опубликовать свои фактические заголовки классов и трассировку стека исключений? PorridgeBear

Ваш Ответ

4   ответа
49

Пытаться:

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

а также

throw new NotFoundHttpException("Page not found");

Я думаю, вы поняли это немного назад :-)

Не отправляет 404 статус
спасибо @Chris, работал как шарм
10

Если это в контроллере, вы можете сделать это следующим образом:

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

In the controllerВы можете просто сделать:

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; на вершине. Причина этого заключается в том, что вы не используете класс напрямую, как при использовании конструктора.

Outside the controllerВы должны указать, где класс может быть найден, и выдать исключение, как обычно. Как это:

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!");
29

в любом контроллере вы можете использовать это для404 HTTP response inside Symfony

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

такой же как

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

или это для500 HTTP response code

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

Также ... ДляCustom Exception Вы можете передать этот URL

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededcreateException()Error: User Rate Limit Exceeded
лучше .. ничего не сказано.
Error: User Rate Limit ExceededHTTPException, как описано в последнем примере выше.

Похожие вопросы