FlattenException now unwraps errors

Contributed by
Alexander M. Turek
in #26028.

Symfony 把程序抛出的错误打包在 FatalThrowableError 中。这可让真正的 error类 不显示在异常页面中,当你把 0 做为除数时,你只能看到 Symfony 的 FatalThrowableError 而不是 PHP 的 DivisionByZeroError

在 Symfony 4.1 中,FlattenException 已经从 FatalThrowableError 实例中解包出来,并记录下打了包的错误信息。结果就是,真正的 error类 始终显示在异常页页中:

引入全新的异常类

Contributed by
Sullivan Senechal and Florent Mata
in #25775 and #26475.

在 Symfony 4.1 我们在 Process组件 中引入了全新的 ProcessSignaledException 类,来正确抓取发出信号的进程错误。同时,在 HttpFoundation组件 中,我们针对文件上传处理引入了新的细节丰富的异常类,来替换掉通用的万能 FileException 异常:

1
2
3
4
5
6
7
use Symfony\Component\HttpFoundation\File\Exception\CannotWriteFileException; 
use Symfony\Component\HttpFoundation\File\Exception\ExtensionFileException;
use Symfony\Component\HttpFoundation\File\Exception\FormSizeFileException;
use Symfony\Component\HttpFoundation\File\Exception\IniSizeFileException;
use Symfony\Component\HttpFoundation\File\Exception\NoFileException;
use Symfony\Component\HttpFoundation\File\Exception\NoTmpDirFileException;
use Symfony\Component\HttpFoundation\File\Exception\PartialFileException;

还有,PHP 7.1 支持了 multi catch exception handling(获取多个异常的处理),你可以用同一个 catch() 区块来处理若干个异常:

1
2
3
4
5
try {
    // ...
} catch (FormSizeFileException | IniSizeFileException $e) {
    // ...
}

改进了的报错页

Contributed by
Javier Eguiluz
in #26671.

报错页面在 Symfony 4.1 中被改进了,减少了关于 "vendor code" 三方代码的信息。如果出错的代码属于 vendor/ 文件夹,我们将这些信息最小化到一行之内,并且不再显示其参数。其他代码保持相同,以便帮你轻易聚焦在自己程序的代码中: