Merge branch '3.3' into 3.4
* 3.3: [DI] Remove unused props from the PhpDumper [VarDumper] Keep and reuse array stubs in memory [ProxyManager] Cleanup fixtures [Console][WebServerBundle] Use "exec" when possible [Debug] HTML-escape array key Add some phpdocs for IDE autocompletion and better SCA Fixed typo in docblock
This commit is contained in:
commit
531b294b21
@ -26,6 +26,39 @@ use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
|
||||
class PhpDumperTest extends TestCase
|
||||
{
|
||||
public function testDumpContainerWithProxyService()
|
||||
{
|
||||
$this->assertStringMatchesFormatFile(
|
||||
__DIR__.'/../Fixtures/php/lazy_service_structure.txt',
|
||||
$this->dumpLazyServiceProjectServiceContainer(),
|
||||
'->dump() does generate proxy lazy loading logic.'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies that the generated container retrieves the same proxy instance on multiple subsequent requests.
|
||||
*/
|
||||
public function testDumpContainerWithProxyServiceWillShareProxies()
|
||||
{
|
||||
if (!class_exists('LazyServiceProjectServiceContainer', false)) {
|
||||
eval('?>'.$this->dumpLazyServiceProjectServiceContainer());
|
||||
}
|
||||
|
||||
$container = new \LazyServiceProjectServiceContainer();
|
||||
|
||||
$proxy = $container->get('foo');
|
||||
$this->assertInstanceOf('stdClass', $proxy);
|
||||
$this->assertInstanceOf('ProxyManager\Proxy\LazyLoadingInterface', $proxy);
|
||||
$this->assertSame($proxy, $container->get('foo'));
|
||||
|
||||
$this->assertFalse($proxy->isProxyInitialized());
|
||||
|
||||
$proxy->initializeProxy();
|
||||
|
||||
$this->assertTrue($proxy->isProxyInitialized());
|
||||
$this->assertSame($proxy, $container->get('foo'));
|
||||
}
|
||||
|
||||
private function dumpLazyServiceProjectServiceContainer()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
|
||||
@ -37,38 +70,6 @@ class PhpDumperTest extends TestCase
|
||||
|
||||
$dumper->setProxyDumper(new ProxyDumper());
|
||||
|
||||
$dumpedString = $dumper->dump();
|
||||
|
||||
$this->assertStringMatchesFormatFile(
|
||||
__DIR__.'/../Fixtures/php/lazy_service_structure.txt',
|
||||
$dumpedString,
|
||||
'->dump() does generate proxy lazy loading logic.'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies that the generated container retrieves the same proxy instance on multiple subsequent requests.
|
||||
*/
|
||||
public function testDumpContainerWithProxyServiceWillShareProxies()
|
||||
{
|
||||
if (class_exists(StaticProxyConstructor::class)) { // detecting ProxyManager v2
|
||||
require_once __DIR__.'/../Fixtures/php/lazy_service_with_hints.php';
|
||||
} else {
|
||||
require_once __DIR__.'/../Fixtures/php/lazy_service.php';
|
||||
}
|
||||
|
||||
$container = new \LazyServiceProjectServiceContainer();
|
||||
|
||||
/* @var $proxy \stdClass_c1d194250ee2e2b7d2eab8b8212368a8 */
|
||||
$proxy = $container->get('foo');
|
||||
$this->assertInstanceOf('stdClass_c1d194250ee2e2b7d2eab8b8212368a8', $proxy);
|
||||
$this->assertSame($proxy, $container->get('foo'));
|
||||
|
||||
$this->assertFalse($proxy->isProxyInitialized());
|
||||
|
||||
$proxy->initializeProxy();
|
||||
|
||||
$this->assertTrue($proxy->isProxyInitialized());
|
||||
$this->assertSame($proxy, $container->get('foo'));
|
||||
return $dumper->dump(array('class' => 'LazyServiceProjectServiceContainer'));
|
||||
}
|
||||
}
|
||||
|
@ -1,182 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Symfony\Component\DependencyInjection\Container;
|
||||
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
|
||||
use Symfony\Component\DependencyInjection\Exception\LogicException;
|
||||
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Component\DependencyInjection\Parameter;
|
||||
use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
|
||||
|
||||
/**
|
||||
* ProjectServiceContainer.
|
||||
*
|
||||
* This class has been auto-generated
|
||||
* by the Symfony Dependency Injection Component.
|
||||
*/
|
||||
class LazyServiceProjectServiceContainer extends Container
|
||||
{
|
||||
protected $methodMap = array(
|
||||
'foo' => 'getFooService',
|
||||
);
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->services = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the 'foo' service.
|
||||
*
|
||||
* This service is shared.
|
||||
* This method always returns the same instance of the service.
|
||||
*
|
||||
* @param bool $lazyLoad whether to try lazy-loading the service with a proxy
|
||||
*
|
||||
* @return stdClass A stdClass instance
|
||||
*/
|
||||
public function getFooService($lazyLoad = true)
|
||||
{
|
||||
if ($lazyLoad) {
|
||||
return $this->services['foo'] = new stdClass_c1d194250ee2e2b7d2eab8b8212368a8(
|
||||
function (&$wrappedInstance, \ProxyManager\Proxy\LazyLoadingInterface $proxy) {
|
||||
$wrappedInstance = $this->getFooService(false);
|
||||
|
||||
$proxy->setProxyInitializer(null);
|
||||
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return new \stdClass();
|
||||
}
|
||||
}
|
||||
|
||||
class stdClass_c1d194250ee2e2b7d2eab8b8212368a8 extends \stdClass implements \ProxyManager\Proxy\LazyLoadingInterface, \ProxyManager\Proxy\ValueHolderInterface
|
||||
{
|
||||
/**
|
||||
* @var \Closure|null initializer responsible for generating the wrapped object
|
||||
*/
|
||||
private $valueHolder5157dd96e88c0 = null;
|
||||
|
||||
/**
|
||||
* @var \Closure|null initializer responsible for generating the wrapped object
|
||||
*/
|
||||
private $initializer5157dd96e8924 = null;
|
||||
|
||||
/**
|
||||
* @override constructor for lazy initialization
|
||||
*
|
||||
* @param \Closure|null $initializer
|
||||
*/
|
||||
public function __construct($initializer)
|
||||
{
|
||||
$this->initializer5157dd96e8924 = $initializer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__get', array('name' => $name));
|
||||
|
||||
return $this->valueHolder5157dd96e88c0->$name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function __set($name, $value)
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__set', array('name' => $name, 'value' => $value));
|
||||
|
||||
$this->valueHolder5157dd96e88c0->$name = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function __isset($name)
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__isset', array('name' => $name));
|
||||
|
||||
return isset($this->valueHolder5157dd96e88c0->$name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
public function __unset($name)
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__unset', array('name' => $name));
|
||||
|
||||
unset($this->valueHolder5157dd96e88c0->$name);
|
||||
}
|
||||
|
||||
public function __clone()
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__clone', array());
|
||||
|
||||
$this->valueHolder5157dd96e88c0 = clone $this->valueHolder5157dd96e88c0;
|
||||
}
|
||||
|
||||
public function __sleep()
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__sleep', array());
|
||||
|
||||
return array('valueHolder5157dd96e88c0');
|
||||
}
|
||||
|
||||
public function __wakeup()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setProxyInitializer(\Closure $initializer = null)
|
||||
{
|
||||
$this->initializer5157dd96e8924 = $initializer;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getProxyInitializer()
|
||||
{
|
||||
return $this->initializer5157dd96e8924;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function initializeProxy()
|
||||
{
|
||||
return $this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, 'initializeProxy', array());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isProxyInitialized()
|
||||
{
|
||||
return null !== $this->valueHolder5157dd96e88c0;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getWrappedValueHolderValue()
|
||||
{
|
||||
return $this->valueHolder5157dd96e88c0;
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
use %a
|
||||
class ProjectServiceContainer extends Container
|
||||
class LazyServiceProjectServiceContainer extends Container
|
||||
{%a
|
||||
public function getFooService($lazyLoad = true)
|
||||
{
|
||||
|
@ -1,182 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Symfony\Component\DependencyInjection\Container;
|
||||
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
|
||||
use Symfony\Component\DependencyInjection\Exception\LogicException;
|
||||
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Component\DependencyInjection\Parameter;
|
||||
use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
|
||||
|
||||
/**
|
||||
* ProjectServiceContainer.
|
||||
*
|
||||
* This class has been auto-generated
|
||||
* by the Symfony Dependency Injection Component.
|
||||
*/
|
||||
class LazyServiceProjectServiceContainer extends Container
|
||||
{
|
||||
protected $methodMap = array(
|
||||
'foo' => 'getFooService',
|
||||
);
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->services = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the 'foo' service.
|
||||
*
|
||||
* This service is shared.
|
||||
* This method always returns the same instance of the service.
|
||||
*
|
||||
* @param bool $lazyLoad whether to try lazy-loading the service with a proxy
|
||||
*
|
||||
* @return stdClass A stdClass instance
|
||||
*/
|
||||
public function getFooService($lazyLoad = true)
|
||||
{
|
||||
if ($lazyLoad) {
|
||||
return $this->services['foo'] = new stdClass_c1d194250ee2e2b7d2eab8b8212368a8(
|
||||
function (&$wrappedInstance, \ProxyManager\Proxy\LazyLoadingInterface $proxy) {
|
||||
$wrappedInstance = $this->getFooService(false);
|
||||
|
||||
$proxy->setProxyInitializer(null);
|
||||
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return new \stdClass();
|
||||
}
|
||||
}
|
||||
|
||||
class stdClass_c1d194250ee2e2b7d2eab8b8212368a8 extends \stdClass implements \ProxyManager\Proxy\LazyLoadingInterface, \ProxyManager\Proxy\ValueHolderInterface
|
||||
{
|
||||
/**
|
||||
* @var \Closure|null initializer responsible for generating the wrapped object
|
||||
*/
|
||||
private $valueHolder5157dd96e88c0 = null;
|
||||
|
||||
/**
|
||||
* @var \Closure|null initializer responsible for generating the wrapped object
|
||||
*/
|
||||
private $initializer5157dd96e8924 = null;
|
||||
|
||||
/**
|
||||
* @override constructor for lazy initialization
|
||||
*
|
||||
* @param \Closure|null $initializer
|
||||
*/
|
||||
public function __construct($initializer)
|
||||
{
|
||||
$this->initializer5157dd96e8924 = $initializer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__get', array('name' => $name));
|
||||
|
||||
return $this->valueHolder5157dd96e88c0->$name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function __set($name, $value)
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__set', array('name' => $name, 'value' => $value));
|
||||
|
||||
$this->valueHolder5157dd96e88c0->$name = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function __isset($name)
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__isset', array('name' => $name));
|
||||
|
||||
return isset($this->valueHolder5157dd96e88c0->$name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
public function __unset($name)
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__unset', array('name' => $name));
|
||||
|
||||
unset($this->valueHolder5157dd96e88c0->$name);
|
||||
}
|
||||
|
||||
public function __clone()
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__clone', array());
|
||||
|
||||
$this->valueHolder5157dd96e88c0 = clone $this->valueHolder5157dd96e88c0;
|
||||
}
|
||||
|
||||
public function __sleep()
|
||||
{
|
||||
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__sleep', array());
|
||||
|
||||
return array('valueHolder5157dd96e88c0');
|
||||
}
|
||||
|
||||
public function __wakeup()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setProxyInitializer(\Closure $initializer = null)
|
||||
{
|
||||
$this->initializer5157dd96e8924 = $initializer;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getProxyInitializer()
|
||||
{
|
||||
return $this->initializer5157dd96e8924;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function initializeProxy(): bool
|
||||
{
|
||||
return $this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, 'initializeProxy', array());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isProxyInitialized(): bool
|
||||
{
|
||||
return null !== $this->valueHolder5157dd96e88c0;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getWrappedValueHolderValue()
|
||||
{
|
||||
return $this->valueHolder5157dd96e88c0;
|
||||
}
|
||||
}
|
@ -17,7 +17,7 @@
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"symfony/console": "~2.8.8|~3.0.8|~3.1.2|~3.2|~4.0",
|
||||
"symfony/console": "~3.3|~4.0",
|
||||
"symfony/http-kernel": "~3.3|~4.0",
|
||||
"symfony/process": "~3.3|~4.0"
|
||||
},
|
||||
|
@ -393,7 +393,7 @@ EOF;
|
||||
$formattedValue = str_replace("\n", '', $this->escapeHtml(var_export($item[1], true)));
|
||||
}
|
||||
|
||||
$result[] = is_int($key) ? $formattedValue : sprintf("'%s' => %s", $key, $formattedValue);
|
||||
$result[] = is_int($key) ? $formattedValue : sprintf("'%s' => %s", $this->escapeHtml($key), $formattedValue);
|
||||
}
|
||||
|
||||
return implode(', ', $result);
|
||||
|
@ -273,13 +273,12 @@ class PhpDumper extends Dumper
|
||||
/**
|
||||
* Generates the require_once statement for service includes.
|
||||
*
|
||||
* @param string $id
|
||||
* @param Definition $definition
|
||||
* @param array $inlinedDefinitions
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function addServiceInclude($id, Definition $definition, array $inlinedDefinitions)
|
||||
private function addServiceInclude(Definition $definition, array $inlinedDefinitions)
|
||||
{
|
||||
$template = " require_once %s;\n";
|
||||
$code = '';
|
||||
@ -353,9 +352,9 @@ class PhpDumper extends Dumper
|
||||
$code .= $this->addNewInstance($sDefinition, '$'.$name, ' = ', $id);
|
||||
|
||||
if (!$this->hasReference($id, $sDefinition->getMethodCalls(), true) && !$this->hasReference($id, $sDefinition->getProperties(), true)) {
|
||||
$code .= $this->addServiceProperties(null, $sDefinition, $name);
|
||||
$code .= $this->addServiceMethodCalls(null, $sDefinition, $name);
|
||||
$code .= $this->addServiceConfigurator(null, $sDefinition, $name);
|
||||
$code .= $this->addServiceProperties($sDefinition, $name);
|
||||
$code .= $this->addServiceMethodCalls($sDefinition, $name);
|
||||
$code .= $this->addServiceConfigurator($sDefinition, $name);
|
||||
}
|
||||
|
||||
$code .= "\n";
|
||||
@ -453,13 +452,12 @@ class PhpDumper extends Dumper
|
||||
/**
|
||||
* Adds method calls to a service definition.
|
||||
*
|
||||
* @param string $id
|
||||
* @param Definition $definition
|
||||
* @param string $variableName
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function addServiceMethodCalls($id, Definition $definition, $variableName = 'instance')
|
||||
private function addServiceMethodCalls(Definition $definition, $variableName = 'instance')
|
||||
{
|
||||
$calls = '';
|
||||
foreach ($definition->getMethodCalls() as $call) {
|
||||
@ -474,7 +472,7 @@ class PhpDumper extends Dumper
|
||||
return $calls;
|
||||
}
|
||||
|
||||
private function addServiceProperties($id, Definition $definition, $variableName = 'instance')
|
||||
private function addServiceProperties(Definition $definition, $variableName = 'instance')
|
||||
{
|
||||
$code = '';
|
||||
foreach ($definition->getProperties() as $name => $value) {
|
||||
@ -518,9 +516,9 @@ class PhpDumper extends Dumper
|
||||
}
|
||||
|
||||
$name = (string) $this->definitionVariables->offsetGet($iDefinition);
|
||||
$code .= $this->addServiceProperties(null, $iDefinition, $name);
|
||||
$code .= $this->addServiceMethodCalls(null, $iDefinition, $name);
|
||||
$code .= $this->addServiceConfigurator(null, $iDefinition, $name);
|
||||
$code .= $this->addServiceProperties($iDefinition, $name);
|
||||
$code .= $this->addServiceMethodCalls($iDefinition, $name);
|
||||
$code .= $this->addServiceConfigurator($iDefinition, $name);
|
||||
}
|
||||
|
||||
if ('' !== $code) {
|
||||
@ -533,13 +531,12 @@ class PhpDumper extends Dumper
|
||||
/**
|
||||
* Adds configurator definition.
|
||||
*
|
||||
* @param string $id
|
||||
* @param Definition $definition
|
||||
* @param string $variableName
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function addServiceConfigurator($id, Definition $definition, $variableName = 'instance')
|
||||
private function addServiceConfigurator(Definition $definition, $variableName = 'instance')
|
||||
{
|
||||
if (!$callable = $definition->getConfigurator()) {
|
||||
return '';
|
||||
@ -649,14 +646,14 @@ EOF;
|
||||
$isSimpleInstance = $this->isSimpleInstance($id, $definition, $inlinedDefinitions);
|
||||
|
||||
$code .=
|
||||
$this->addServiceInclude($id, $definition, $inlinedDefinitions).
|
||||
$this->addServiceInclude($definition, $inlinedDefinitions).
|
||||
$this->addServiceLocalTempVariables($id, $definition, $inlinedDefinitions).
|
||||
$this->addServiceInlinedDefinitions($id, $inlinedDefinitions).
|
||||
$this->addServiceInstance($id, $definition, $isSimpleInstance).
|
||||
$this->addServiceInlinedDefinitionsSetup($id, $inlinedDefinitions, $isSimpleInstance).
|
||||
$this->addServiceProperties($id, $definition).
|
||||
$this->addServiceMethodCalls($id, $definition).
|
||||
$this->addServiceConfigurator($id, $definition).
|
||||
$this->addServiceProperties($definition).
|
||||
$this->addServiceMethodCalls($definition).
|
||||
$this->addServiceConfigurator($definition).
|
||||
$this->addServiceReturn($id, $isSimpleInstance)
|
||||
;
|
||||
|
||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Form\FormEvents;
|
||||
use Symfony\Component\Form\FormEvent;
|
||||
use Symfony\Component\Form\Exception\UnexpectedTypeException;
|
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
|
||||
/**
|
||||
* Resize a collection form element based on the data sent from the client.
|
||||
@ -150,6 +151,7 @@ class ResizeFormListener implements EventSubscriberInterface
|
||||
|
||||
if ($entryFilter = $this->deleteEmpty) {
|
||||
$previousData = $form->getData();
|
||||
/** @var FormInterface $child */
|
||||
foreach ($form as $name => $child) {
|
||||
$isNew = !isset($previousData[$name]);
|
||||
$isEmpty = is_callable($entryFilter) ? $entryFilter($child->getData()) : $child->isEmpty();
|
||||
|
@ -116,6 +116,7 @@ class ChoiceType extends AbstractType
|
||||
// Reconstruct the data as mapping from child names to values
|
||||
$data = array();
|
||||
|
||||
/** @var FormInterface $child */
|
||||
foreach ($form as $child) {
|
||||
$value = $child->getConfig()->getOption('value');
|
||||
|
||||
|
@ -78,6 +78,7 @@ class FormValidator extends ConstraintValidator
|
||||
} else {
|
||||
$childrenSynchronized = true;
|
||||
|
||||
/** @var FormInterface $child */
|
||||
foreach ($form as $child) {
|
||||
if (!$child->isSynchronized()) {
|
||||
$childrenSynchronized = false;
|
||||
|
@ -12,7 +12,7 @@
|
||||
namespace Symfony\Component\Security\Core\Exception;
|
||||
|
||||
/**
|
||||
* AuthenticationServiceException is thrown when an authenticated token becomes un-authentcated between requests.
|
||||
* AuthenticationServiceException is thrown when an authenticated token becomes un-authenticated between requests.
|
||||
*
|
||||
* In practice, this is due to the User changing between requests (e.g. password changes),
|
||||
* causes the token to become un-authenticated.
|
||||
|
@ -16,8 +16,10 @@ namespace Symfony\Component\VarDumper\Cloner;
|
||||
*/
|
||||
class VarCloner extends AbstractCloner
|
||||
{
|
||||
private static $gid;
|
||||
private static $hashMask = 0;
|
||||
private static $hashOffset = 0;
|
||||
private static $arrayCache = array();
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
@ -40,14 +42,15 @@ class VarCloner extends AbstractCloner
|
||||
$currentDepthFinalIndex = 0; // Final $queue index for current tree depth
|
||||
$minimumDepthReached = $minDepth === 0; // Becomes true when minimum tree depth has been reached
|
||||
$cookie = (object) array(); // Unique object used to detect hard references
|
||||
$gid = uniqid(mt_rand(), true); // Unique string used to detect the special $GLOBALS variable
|
||||
$a = null; // Array cast for nested structures
|
||||
$stub = null; // Stub capturing the main properties of an original item value
|
||||
// or null if the original value is used directly
|
||||
|
||||
if (!self::$hashMask) {
|
||||
self::$gid = uniqid(mt_rand(), true); // Unique string used to detect the special $GLOBALS variable
|
||||
self::initHashMask();
|
||||
}
|
||||
$gid = self::$gid;
|
||||
$hashMask = self::$hashMask;
|
||||
$hashOffset = self::$hashOffset;
|
||||
$arrayStub = new Stub();
|
||||
@ -71,9 +74,9 @@ class VarCloner extends AbstractCloner
|
||||
if (\is_int($k)) {
|
||||
continue;
|
||||
}
|
||||
foreach (array($k => true) as $j => $v) {
|
||||
foreach (array($k => true) as $gk => $gv) {
|
||||
}
|
||||
if ($k !== $j) {
|
||||
if ($gk !== $k) {
|
||||
$fromObjCast = true;
|
||||
$refs = $vals = \array_values($queue[$i]);
|
||||
break;
|
||||
@ -108,7 +111,7 @@ class VarCloner extends AbstractCloner
|
||||
case true === $v:
|
||||
case \is_int($v):
|
||||
case \is_float($v):
|
||||
break;
|
||||
continue 2;
|
||||
|
||||
case \is_string($v):
|
||||
if (!\preg_match('//u', $v)) {
|
||||
@ -127,7 +130,10 @@ class VarCloner extends AbstractCloner
|
||||
$stub->class = Stub::STRING_UTF8;
|
||||
$stub->cut = $cut;
|
||||
$stub->value = \mb_substr($v, 0, $maxString, 'UTF-8');
|
||||
} else {
|
||||
continue 2;
|
||||
}
|
||||
$a = null;
|
||||
break;
|
||||
|
||||
case \is_array($v):
|
||||
@ -159,11 +165,9 @@ class VarCloner extends AbstractCloner
|
||||
} else {
|
||||
$a = $v;
|
||||
}
|
||||
} else {
|
||||
} elseif (\PHP_VERSION_ID < 70200) {
|
||||
$indexedArrays[$len] = true;
|
||||
}
|
||||
|
||||
$stub->value = \count($a);
|
||||
break;
|
||||
|
||||
case \is_object($v):
|
||||
@ -223,7 +227,6 @@ class VarCloner extends AbstractCloner
|
||||
break;
|
||||
}
|
||||
|
||||
if (isset($stub)) {
|
||||
if ($a) {
|
||||
if (!$minimumDepthReached || 0 > $maxItems) {
|
||||
$queue[$len] = $a;
|
||||
@ -247,8 +250,10 @@ class VarCloner extends AbstractCloner
|
||||
if ($arrayStub->cut) {
|
||||
$stub = array($arrayStub->cut, $arrayStub->class => $arrayStub->position);
|
||||
$arrayStub->cut = 0;
|
||||
} elseif (isset(self::$arrayCache[$arrayStub->class][$arrayStub->position])) {
|
||||
$stub = self::$arrayCache[$arrayStub->class][$arrayStub->position];
|
||||
} else {
|
||||
$stub = array($arrayStub->class => $arrayStub->position);
|
||||
self::$arrayCache[$arrayStub->class][$arrayStub->position] = $stub = array($arrayStub->class => $arrayStub->position);
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,9 +262,6 @@ class VarCloner extends AbstractCloner
|
||||
} else {
|
||||
$vals[$k] = $stub;
|
||||
}
|
||||
|
||||
$stub = $a = null;
|
||||
}
|
||||
}
|
||||
|
||||
if ($fromObjCast) {
|
||||
@ -268,9 +270,9 @@ class VarCloner extends AbstractCloner
|
||||
$vals = array();
|
||||
$j = -1;
|
||||
foreach ($queue[$i] as $k => $v) {
|
||||
foreach (array($k => true) as $a => $v) {
|
||||
foreach (array($k => true) as $gk => $gv) {
|
||||
}
|
||||
if ($a !== $k) {
|
||||
if ($gk !== $k) {
|
||||
$vals = (object) $vals;
|
||||
$vals->{$k} = $refs[++$j];
|
||||
$vals = (array) $vals;
|
||||
@ -281,7 +283,6 @@ class VarCloner extends AbstractCloner
|
||||
}
|
||||
|
||||
$queue[$i] = $vals;
|
||||
unset($indexedArrays[$i]);
|
||||
}
|
||||
|
||||
foreach ($values as $h => $v) {
|
||||
|
Reference in New Issue
Block a user