Symfony2 - Получение 'Попытка загрузить класс "Exception" из пространства имен "AppBundle\Controller".'

Создание простых исключений является обычной практикой, поэтому я думаю, что это будет "встроенный в Symfony2," прямо из коробки ". Однако, выполняя следующий код, я получаю сообщение об ошибке, частично показанное в заголовке этого вопроса и полностью показанное". ниже.

   if( ( $result === FALSE ) || ( $result !== 1 ) ) {

     throw new Exception( 'update user account data function -- ' .
                          'update return value: ' . $result . ' - ' .
                          'unable to update your account!' );

   } // if( ( $result === FALSE ) || ( $result !== 1 ) ) ...

Эта ошибка говорит мне, что новый класс Exception не поддерживается Symfony2, если я не добавлю его в область использования моего контроллера, но я не знаю, какое значение добавить туда, чтобы использовать эту функцию PHP.

Кто-нибудь, пожалуйста, скажите мне, что поместить в мою область использования?

В моем коде, основанном на примерах, показанных на странице "Исключения PHP" w3School по адресу https://www.w3schools.com/php/php_exception.asp, переменная $result устанавливается методом обновления Doctrine DBAL ( http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html), которая возвращает количество обновленных строк или FALSE, если произошла ошибка.

Я знаю, что метод обновления в моем коде работает, потому что большую часть времени $result присваивается ненулевое возвращаемое значение и не возникает никаких исключений, но иногда $result присваивается 0, но все еще нет исключения, что указывает на известную строку существовать на самом деле не обновляется.

Есть ли способ узнать, почему обновление не удалось?

В этой ситуации я пытаюсь вызвать исключение, используя приведенный выше код, но затем Symfony2 отображает следующее:

Попытка загрузить класс "Исключение" из пространства имен "AppBundle\Controller". Вы забыли выражение "использовать", например, для "Symfony\Component\Security\Acl\Exception\Exception", "Symfony\Component\Serializer\Exception\Exception" или "Symfony\Component\Config\Definition\Exception\Exception"? 500 Внутренняя ошибка сервера - ClassNotFoundException

  1. в src/AppBundle/Controller/BreakinOutAdminController.php в строке 1361


1358. 1359. if( ( $result === FALSE ) || ( $result !== self::ONE_ROW ) ) { 1360. 1361. throw new Exception( 'update user account data function -- ' . 1362. 'update return value: ' . $result . ' - ' . 1363. 'unable to update your account!' ); 1364.

Строка 1361 выделена на странице воспроизведения Symphony2.

Итак, два вопроса:

Что я должен поместить в свою область использования, чтобы я мог выдать исключение со своим собственным сообщением?

Есть ли способ узнать, почему обновление не удалось?

Спасибо.

1 ответ

Attempted to load class "Exception" from (the current) namespace это проблема, которую я делаю сам довольно часто. Это не проблема Symfony - просто пространства имен по умолчанию.

...new Exception (или SplExceptions, или что-нибудь еще - DateTime часто встречается та же проблема) просто означает получение класса из текущего пространства имен, если на него нет конкретной ссылки из use список - но Exception, или же DateTimeили другие находятся в корневом пространстве имен - \Exception, Вы можете use их для каждого файла, чтобы ввести псевдоним, который будет использоваться локально, или добавьте \ обратную косую черту. Хорошие модульные тесты, которые запускают весь код и поэтому ломают его, когда дело доходит до этого - или статический анализ кода, такой как phpstan, может очень помочь избежать производственных ошибок, когда такие классы не существуют в пространствах имен, которые в настоящее время доступны для скрипт.

Другие вопросы по тегам