我正在将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
Run Code Online (Sandbox Code Playgroud)
异常消息是正确的,$matches数组中没有索引 10 。但是,我不明白为什么这会在 Symfony 中引发异常
因此,虽然两个项目都在同一环境中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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |