Почему Symfony 3.4 генерирует исключение ContextErrorException в уведомлении PHP, в то время как Symfony 2.8 прекрасно работает с тем же кодом? - PullRequest
0 голосов
/ 17 декабря 2018

Я работаю над переносом проекта 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
  • Оба проекта позволяют изменять / добавлять настройки PHP.ini в файлах .htaccess (насколько я вижу)

Итак, обапроекты выполняются в той же среде, Symfony 2.8 работает нормально, а Symfony 3.4 создает исключение в уведомлении PHP.Даже не ошибка или предупреждение, а просто уведомление.Как это может быть и как решить эту проблему?

Существуют ли другие конфигурационные файлы, в которых Symfony 3.8 изменяет настройки PHP?

1 Ответ

0 голосов
/ 17 декабря 2018

Мне удалось найти решение:

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