feature #22804 [Debug] Removed ContextErrorException (mbabker)
This PR was merged into the 4.0-dev branch.
Discussion
----------
[Debug] Removed ContextErrorException
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| BC breaks? | yes
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #21388
| License | MIT
| Doc PR | n/a
Commits
-------
76dc317
Removed ContextErrorException
This commit is contained in:
commit
7974cd74e0
@ -5,6 +5,7 @@ CHANGELOG
|
|||||||
-----
|
-----
|
||||||
|
|
||||||
* removed the symfony_debug extension
|
* removed the symfony_debug extension
|
||||||
|
* removed `ContextErrorException`
|
||||||
|
|
||||||
3.4.0
|
3.4.0
|
||||||
-----
|
-----
|
||||||
|
@ -13,7 +13,6 @@ namespace Symfony\Component\Debug;
|
|||||||
|
|
||||||
use Psr\Log\LogLevel;
|
use Psr\Log\LogLevel;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Symfony\Component\Debug\Exception\ContextErrorException;
|
|
||||||
use Symfony\Component\Debug\Exception\FatalErrorException;
|
use Symfony\Component\Debug\Exception\FatalErrorException;
|
||||||
use Symfony\Component\Debug\Exception\FatalThrowableError;
|
use Symfony\Component\Debug\Exception\FatalThrowableError;
|
||||||
use Symfony\Component\Debug\Exception\OutOfMemoryException;
|
use Symfony\Component\Debug\Exception\OutOfMemoryException;
|
||||||
@ -415,11 +414,7 @@ class ErrorHandler
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ($scope) {
|
$errorAsException = new \ErrorException($logMessage, 0, $type, $file, $line);
|
||||||
$errorAsException = new ContextErrorException($logMessage, 0, $type, $file, $line, $context);
|
|
||||||
} else {
|
|
||||||
$errorAsException = new \ErrorException($logMessage, 0, $type, $file, $line);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean the trace by removing function arguments and the first frames added by the error handler itself.
|
// Clean the trace by removing function arguments and the first frames added by the error handler itself.
|
||||||
if ($throw || $this->tracedErrors & $type) {
|
if ($throw || $this->tracedErrors & $type) {
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Component\Debug\Exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error Exception with Variable Context.
|
|
||||||
*
|
|
||||||
* @author Christian Sciberras <uuf6429@gmail.com>
|
|
||||||
*
|
|
||||||
* @deprecated since version 3.3. Instead, \ErrorException will be used directly in 4.0.
|
|
||||||
*/
|
|
||||||
class ContextErrorException extends \ErrorException
|
|
||||||
{
|
|
||||||
private $context = array();
|
|
||||||
|
|
||||||
public function __construct($message, $code, $severity, $filename, $lineno, $context = array())
|
|
||||||
{
|
|
||||||
parent::__construct($message, $code, $severity, $filename, $lineno);
|
|
||||||
$this->context = $context;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array Array of variables that existed when the exception occurred
|
|
||||||
*/
|
|
||||||
public function getContext()
|
|
||||||
{
|
|
||||||
@trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0.', __CLASS__), E_USER_DEPRECATED);
|
|
||||||
|
|
||||||
return $this->context;
|
|
||||||
}
|
|
||||||
}
|
|
@ -13,7 +13,6 @@ namespace Symfony\Component\Debug\Tests;
|
|||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Symfony\Component\Debug\DebugClassLoader;
|
use Symfony\Component\Debug\DebugClassLoader;
|
||||||
use Symfony\Component\Debug\ErrorHandler;
|
|
||||||
|
|
||||||
class DebugClassLoaderTest extends TestCase
|
class DebugClassLoaderTest extends TestCase
|
||||||
{
|
{
|
||||||
@ -59,38 +58,6 @@ class DebugClassLoaderTest extends TestCase
|
|||||||
$this->fail('DebugClassLoader did not register');
|
$this->fail('DebugClassLoader did not register');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testStacking()
|
|
||||||
{
|
|
||||||
// the ContextErrorException must not be loaded to test the workaround
|
|
||||||
// for https://bugs.php.net/65322.
|
|
||||||
if (class_exists('Symfony\Component\Debug\Exception\ContextErrorException', false)) {
|
|
||||||
$this->markTestSkipped('The ContextErrorException class is already loaded.');
|
|
||||||
}
|
|
||||||
|
|
||||||
ErrorHandler::register();
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Trigger autoloading + E_STRICT at compile time
|
|
||||||
// which in turn triggers $errorHandler->handle()
|
|
||||||
// that again triggers autoloading for ContextErrorException.
|
|
||||||
// Error stacking works around the bug above and everything is fine.
|
|
||||||
|
|
||||||
eval('
|
|
||||||
namespace '.__NAMESPACE__.';
|
|
||||||
class ChildTestingStacking extends TestingStacking { function foo($bar) {} }
|
|
||||||
');
|
|
||||||
$this->fail('ContextErrorException expected');
|
|
||||||
} catch (\ErrorException $exception) {
|
|
||||||
// if an exception is thrown, the test passed
|
|
||||||
$this->assertStringStartsWith(__FILE__, $exception->getFile());
|
|
||||||
$this->assertRegExp('/^Warning: Declaration/', $exception->getMessage());
|
|
||||||
$this->assertEquals(E_WARNING, $exception->getSeverity());
|
|
||||||
} finally {
|
|
||||||
restore_error_handler();
|
|
||||||
restore_exception_handler();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \RuntimeException
|
* @expectedException \RuntimeException
|
||||||
*/
|
*/
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
namespace Symfony\Component\HttpFoundation\Session\Storage;
|
namespace Symfony\Component\HttpFoundation\Session\Storage;
|
||||||
|
|
||||||
use Symfony\Component\Debug\Exception\ContextErrorException;
|
|
||||||
use Symfony\Component\HttpFoundation\Session\SessionBagInterface;
|
use Symfony\Component\HttpFoundation\Session\SessionBagInterface;
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeSessionHandler;
|
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeSessionHandler;
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\AbstractProxy;
|
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\AbstractProxy;
|
||||||
@ -213,13 +212,13 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
{
|
{
|
||||||
// Register custom error handler to catch a possible failure warning during session write
|
// Register custom error handler to catch a possible failure warning during session write
|
||||||
set_error_handler(function ($errno, $errstr, $errfile, $errline, $errcontext) {
|
set_error_handler(function ($errno, $errstr, $errfile, $errline, $errcontext) {
|
||||||
throw new ContextErrorException($errstr, $errno, E_WARNING, $errfile, $errline, $errcontext);
|
throw new \ErrorException($errstr, $errno, E_WARNING, $errfile, $errline, $errcontext);
|
||||||
}, E_WARNING);
|
}, E_WARNING);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
session_write_close();
|
session_write_close();
|
||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
} catch (ContextErrorException $e) {
|
} catch (\ErrorException $e) {
|
||||||
// The default PHP error message is not very helpful, as it does not give any information on the current save handler.
|
// The default PHP error message is not very helpful, as it does not give any information on the current save handler.
|
||||||
// Therefore, we catch this error and trigger a warning with a better error message
|
// Therefore, we catch this error and trigger a warning with a better error message
|
||||||
$handler = $this->getSaveHandler();
|
$handler = $this->getSaveHandler();
|
||||||
|
Reference in New Issue
Block a user