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