如何捕获此类错误?
ContextErrorException:Catchable Fatal Error:Argument 1传递给AA \ SomeBundle \ Entity \ SomeEntity :: setCity()必须是AA \ SomeBundle \ Entity \ City的实例,null,在/ srv / dev中调用第360行的/some_path/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php,在/srv/dev/some_path/src/AA/SomeBundle/Entity/SomeEntity.php第788行中定义
我正试图抓住这样的一切:
$form = $this->createForm(new SomeFormType(), $instanceOfSomeEntity);
try {
$form->handleRequest($request);
} catch (\Exception $e) {
$form->addError(new FormError('missing_information'));
}
答案 0 :(得分:0)
解决此问题的最简单方法是使用@符号为违规代码添加前缀,以便抑制任何警告。然后应该在try ... catch中捕获任何错误。
不理想,因为@具有非平凡的性能影响,但除此之外,您正在考虑更换错误处理,或者在我的情况下,从XML读取时,在尝试获取值之前检查每个标记的存在。
这是我的代码,通过添加'@'
来修复 try {
$value = @$this->XML->StructuredXMLResume->ContactInfo->ContactMethod->PostalAddress->DeliveryAddress->AddressLine;
} catch (\Exception $e) {
$value = '';
}
您可以想象,将每个级别检查到AddressLine都是荒谬的。
答案 1 :(得分:-1)
您必须禁用错误报告并使用error_get_last()
函数捕获上一个错误,此处为示例,来自Symfony Finder组件:https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Finder/SplFileInfo.php#L65
另一种方法是创建一个自定义错误处理程序,这里是Monolog的一个例子:https://github.com/Seldaek/monolog/blob/master/src/Monolog/ErrorHandler.php