Merge branch '2.8' into 3.1
* 2.8: Use "more entropy" option for uniqid() reset constraint options added checks for public services on compiler passes that use service id and not references
This commit is contained in:
commit
53d2bdee76
@ -107,7 +107,7 @@ class ProxyDumperTest extends \PHPUnit_Framework_TestCase
|
|||||||
$definitions = array(
|
$definitions = array(
|
||||||
array(new Definition(__CLASS__), true),
|
array(new Definition(__CLASS__), true),
|
||||||
array(new Definition('stdClass'), true),
|
array(new Definition('stdClass'), true),
|
||||||
array(new Definition('foo'.uniqid()), false),
|
array(new Definition(uniqid('foo', true)), false),
|
||||||
array(new Definition(), false),
|
array(new Definition(), false),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ EOF
|
|||||||
$template .= fread(STDIN, 1024);
|
$template .= fread(STDIN, 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->display($input, $output, $io, array($this->validate($twig, $template, uniqid('sf_'))));
|
return $this->display($input, $output, $io, array($this->validate($twig, $template, uniqid('sf_', true))));
|
||||||
}
|
}
|
||||||
|
|
||||||
$filesInfo = $this->getFilesInfo($twig, $filenames);
|
$filesInfo = $this->getFilesInfo($twig, $filenames);
|
||||||
|
@ -28,7 +28,17 @@ class AddConstraintValidatorsPass implements CompilerPassInterface
|
|||||||
$validators[$attributes[0]['alias']] = $id;
|
$validators[$attributes[0]['alias']] = $id;
|
||||||
}
|
}
|
||||||
|
|
||||||
$validators[$container->getDefinition($id)->getClass()] = $id;
|
$definition = $container->getDefinition($id);
|
||||||
|
|
||||||
|
if (!$definition->isPublic()) {
|
||||||
|
throw new InvalidArgumentException(sprintf('The service "%s" must be public as it can be lazy-loaded.', $id));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($definition->isAbstract()) {
|
||||||
|
throw new InvalidArgumentException(sprintf('The service "%s" must not be abstract as it can be lazy-loaded.', $id));
|
||||||
|
}
|
||||||
|
|
||||||
|
$validators[$definition->getClass()] = $id;
|
||||||
}
|
}
|
||||||
|
|
||||||
$container->getDefinition('validator.validator_factory')->replaceArgument(1, $validators);
|
$container->getDefinition('validator.validator_factory')->replaceArgument(1, $validators);
|
||||||
|
@ -75,7 +75,7 @@ class FrameworkBundle extends Bundle
|
|||||||
// but as late as possible to get resolved parameters
|
// but as late as possible to get resolved parameters
|
||||||
$container->addCompilerPass(new RegisterListenersPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
$container->addCompilerPass(new RegisterListenersPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
||||||
$container->addCompilerPass(new TemplatingPass());
|
$container->addCompilerPass(new TemplatingPass());
|
||||||
$container->addCompilerPass(new AddConstraintValidatorsPass());
|
$container->addCompilerPass(new AddConstraintValidatorsPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
||||||
$container->addCompilerPass(new AddValidatorInitializersPass());
|
$container->addCompilerPass(new AddValidatorInitializersPass());
|
||||||
$container->addCompilerPass(new AddConsoleCommandPass());
|
$container->addCompilerPass(new AddConsoleCommandPass());
|
||||||
$container->addCompilerPass(new FormPass());
|
$container->addCompilerPass(new FormPass());
|
||||||
|
@ -129,6 +129,9 @@ abstract class Constraint
|
|||||||
unset($options['value']);
|
unset($options['value']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_array($options)) {
|
||||||
|
reset($options);
|
||||||
|
}
|
||||||
if (is_array($options) && count($options) > 0 && is_string(key($options))) {
|
if (is_array($options) && count($options) > 0 && is_string(key($options))) {
|
||||||
foreach ($options as $option => $value) {
|
foreach ($options as $option => $value) {
|
||||||
if (array_key_exists($option, $knownOptions)) {
|
if (array_key_exists($option, $knownOptions)) {
|
||||||
|
@ -206,4 +206,35 @@ class ConstraintTest extends \PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
Constraint::getErrorName(1);
|
Constraint::getErrorName(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testOptionsAsDefaultOption()
|
||||||
|
{
|
||||||
|
$constraint = new ConstraintA($options = array('value1'));
|
||||||
|
|
||||||
|
$this->assertEquals($options, $constraint->property2);
|
||||||
|
|
||||||
|
$constraint = new ConstraintA($options = array('value1', 'property1' => 'value2'));
|
||||||
|
|
||||||
|
$this->assertEquals($options, $constraint->property2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Symfony\Component\Validator\Exception\InvalidOptionsException
|
||||||
|
* @expectedExceptionMessage The options "0", "5" do not exist
|
||||||
|
*/
|
||||||
|
public function testInvalidOptions()
|
||||||
|
{
|
||||||
|
new ConstraintA(array('property2' => 'foo', 'bar', 5 => 'baz'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testOptionsWithInvalidInternalPointer()
|
||||||
|
{
|
||||||
|
$options = array('property1' => 'foo');
|
||||||
|
next($options);
|
||||||
|
next($options);
|
||||||
|
|
||||||
|
$constraint = new ConstraintA($options);
|
||||||
|
|
||||||
|
$this->assertEquals('foo', $constraint->property1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user