我正在将Symfony 2.8
项目迁移到Symfony 3.4
。虽然整个过程非常直接,但我在一点上遇到了困难:
虽然显示的代码在Symfony 2.8
上运行时没有任何问题,但它在Symfony 3.4
上以ContextErrorException
失败。该代码来自一个"Catch-all"控制器,该控制器处理对任何其他路由都无法处理的URL的调用:
public function catchallAction(Request $request) {
$url = $_SERVER['REQUEST_URI'];
// Try to find a solution, e.g. by adding / replacing the locale
if (1 === preg_match('/(/app_dev.php)?(/([a-z]{2}))?(((/([^/]+))?(/[^?]+))(?(.+))?)/', $url, $matches)) {
$this->logger->info('catchallAction');
$this->logger->info(" $url");
foreach ($matches as $key => $value)
$logger->info(" $key => $value");
$locale = (isset($matches[3]) ? $matches[3] : null);
$subdir = (isset($matches[7]) ? $matches[7] : null);
$path = $matches[5];
$query = $matches[10];
// ==> Exception in Symfony 3.4
...
}
...
}
// Log output
catchallAction
/app_dev.php/logout
0 => /app_dev.php/logout
1 => /app_dev.php
2 =>
3 =>
4 => /logout
5 => /logout
6 =>
7 =>
8 => /logout
异常消息是正确的,$matches
数组中没有索引10但是,我不明白为什么这会在`Symfony中引发异常
- 两个项目运行完全相同的服务器
- 两个项目都使用完全相同的PHP版本和完全相同的PHP.ini
- 在.htaccess文件中更改/添加PHP.ini设置的两个项目(据我所见(
因此,当两个项目在同一环境中运行时,Symfony 2.8
运行良好,而Symfony 3.4
在PHP通知中抛出异常。甚至不是一个错误或警告,只是一个通知。这怎么可能发生,如何解决?
Symfony 3.8
是否还有其他配置文件可以更改PHP设置?
我设法找到了解决方案:
Symfony 3.2
引入了debug.error_handler.throw_at
参数,该参数控制引发异常的PHP错误(警告、通知等(。
只需在config_dev.yml中添加以下内容,即可仅在出现错误时抛出异常。也许这个答案可以帮助其他人腾出一些时间:-(
parameters:
# Avoid Symfony exceptions on PHP Warnings, Notices, etc., just handele error
# PHP E_ERROR = 1
debug.error_handler.throw_at: 1