Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 52c07c7

Browse filesBrowse files
Stefano Salafabpot
authored andcommitted
Deprecated max_length and pattern options
1 parent 37d484c commit 52c07c7
Copy full SHA for 52c07c7

File tree

Expand file treeCollapse file tree

10 files changed

+56
-33
lines changed
Filter options
Expand file treeCollapse file tree

10 files changed

+56
-33
lines changed

‎src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig

Copy file name to clipboardExpand all lines: src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
-2Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,8 +377,6 @@
377377
{%- if read_only %} readonly="readonly"{% endif -%}
378378
{%- if disabled %} disabled="disabled"{% endif -%}
379379
{%- if required %} required="required"{% endif -%}
380-
{%- if max_length %} maxlength="{{ max_length }}"{% endif -%}
381-
{%- if pattern %} pattern="{{ pattern }}"{% endif -%}
382380
{%- for attrname, attrvalue in attr -%}
383381
{{- " " -}}
384382
{%- if attrname in ['placeholder', 'title'] -%}

‎src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/widget_attributes.html.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/widget_attributes.html.php
-2Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
id="<?php echo $view->escape($id) ?>" name="<?php echo $view->escape($full_name) ?>" <?php if ($read_only): ?>readonly="readonly" <?php endif ?>
22
<?php if ($disabled): ?>disabled="disabled" <?php endif ?>
33
<?php if ($required): ?>required="required" <?php endif ?>
4-
<?php if ($max_length): ?>maxlength="<?php echo $view->escape($max_length) ?>" <?php endif ?>
5-
<?php if ($pattern): ?>pattern="<?php echo $view->escape($pattern) ?>" <?php endif ?>
64
<?php foreach ($attr as $k => $v): ?>
75
<?php if (in_array($v, array('placeholder', 'title'), true)): ?>
86
<?php printf('%s="%s" ', $view->escape($k), $view->escape($view['translator']->trans($v, array(), $translation_domain))) ?>

‎src/Symfony/Component/Form/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
2.5.0
55
------
66

7+
* deprecated options "max_length" and "pattern" in favor of putting these values in "attr" option
78
* added an option for multiple files upload
89
* form errors now reference their cause (constraint violation, exception, ...)
910
* form errors now remember which form they were originally added to

‎src/Symfony/Component/Form/Extension/Core/Type/FormType.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Extension/Core/Type/FormType.php
+19-2Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ public function buildView(FormView $view, FormInterface $form, array $options)
9292
'value' => $form->getViewData(),
9393
'data' => $form->getNormData(),
9494
'required' => $form->isRequired(),
95-
'max_length' => $options['max_length'],
96-
'pattern' => $options['pattern'],
95+
'max_length' => isset($options['attr']['maxlength']) ? $options['attr']['maxlength'] : null, // Deprecated
96+
'pattern' => isset($options['attr']['pattern']) ? $options['attr']['pattern'] : null, // Deprecated
9797
'size' => null,
9898
'label_attr' => $options['label_attr'],
9999
'compound' => $form->getConfig()->getCompound(),
@@ -170,6 +170,22 @@ public function setDefaultOptions(OptionsResolverInterface $resolver)
170170
'data',
171171
));
172172

173+
// BC clause for the "max_length" and "pattern" option
174+
// Add these values to the "attr" option instead
175+
$defaultAttr = function (Options $options) {
176+
$attributes = array();
177+
178+
if (null !== $options['max_length']) {
179+
$attributes['maxlength'] = $options['max_length'];
180+
}
181+
182+
if (null !== $options['pattern']) {
183+
$attributes['pattern'] = $options['pattern'];
184+
}
185+
186+
return $attributes;
187+
};
188+
173189
$resolver->setDefaults(array(
174190
'data_class' => $dataClass,
175191
'empty_data' => $emptyData,
@@ -190,6 +206,7 @@ public function setDefaultOptions(OptionsResolverInterface $resolver)
190206
// According to RFC 2396 (http://www.ietf.org/rfc/rfc2396.txt)
191207
// section 4.2., empty URIs are considered same-document references
192208
'action' => '',
209+
'attr' => $defaultAttr
193210
));
194211

195212
$resolver->setAllowedTypes(array(

‎src/Symfony/Component/Form/FormFactory.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/FormFactory.php
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,11 @@ public function createBuilderForProperty($class, $property, $data = null, array
113113
$pattern = $patternGuess ? $patternGuess->getValue() : null;
114114

115115
if (null !== $pattern) {
116-
$options = array_merge(array('pattern' => $pattern), $options);
116+
$options = array_merge(array('attr' => array('pattern' => $pattern)), $options);
117117
}
118118

119119
if (null !== $maxLength) {
120-
$options = array_merge(array('max_length' => $maxLength), $options);
120+
$options = array_merge(array('attr' => array('maxlength' => $maxLength)), $options);
121121
}
122122

123123
if ($requiredGuess) {

‎src/Symfony/Component/Form/Tests/AbstractLayoutTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/AbstractLayoutTest.php
+5-7Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,7 +1252,7 @@ public function testEmail()
12521252
public function testEmailWithMaxLength()
12531253
{
12541254
$form = $this->factory->createNamed('name', 'email', 'foo&bar', array(
1255-
'max_length' => 123,
1255+
'attr' => array('maxlength' => 123),
12561256
));
12571257

12581258
$this->assertWidgetMatchesXpath($form->createView(), array(),
@@ -1418,7 +1418,7 @@ public function testPasswordSubmittedWithNotAlwaysEmpty()
14181418
public function testPasswordWithMaxLength()
14191419
{
14201420
$form = $this->factory->createNamed('name', 'password', 'foo&bar', array(
1421-
'max_length' => 123,
1421+
'attr' => array('maxlength' => 123),
14221422
));
14231423

14241424
$this->assertWidgetMatchesXpath($form->createView(), array(),
@@ -1489,7 +1489,7 @@ public function testRadioWithValue()
14891489
public function testTextarea()
14901490
{
14911491
$form = $this->factory->createNamed('name', 'textarea', 'foo&bar', array(
1492-
'pattern' => 'foo',
1492+
'attr' => array('pattern' => 'foo'),
14931493
));
14941494

14951495
$this->assertWidgetMatchesXpath($form->createView(), array(),
@@ -1518,7 +1518,7 @@ public function testText()
15181518
public function testTextWithMaxLength()
15191519
{
15201520
$form = $this->factory->createNamed('name', 'text', 'foo&bar', array(
1521-
'max_length' => 123,
1521+
'attr' => array('maxlength' => 123),
15221522
));
15231523

15241524
$this->assertWidgetMatchesXpath($form->createView(), array(),
@@ -1898,9 +1898,7 @@ public function testWidgetAttributes()
18981898
'required' => true,
18991899
'disabled' => true,
19001900
'read_only' => true,
1901-
'max_length' => 10,
1902-
'pattern' => '\d+',
1903-
'attr' => array('class' => 'foobar', 'data-foo' => 'bar'),
1901+
'attr' => array('maxlength' => 10, 'pattern' => '\d+', 'class' => 'foobar', 'data-foo' => 'bar'),
19041902
));
19051903

19061904
$html = $this->renderWidget($form->createView());

‎src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php
+5-5Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,16 @@ public function testPreSetDataResizesForm()
6969

7070
$this->factory->expects($this->at(0))
7171
->method('createNamed')
72-
->with(1, 'text', null, array('property_path' => '[1]', 'max_length' => 10, 'auto_initialize' => false))
72+
->with(1, 'text', null, array('property_path' => '[1]', 'attr' => array('maxlength' => 10), 'auto_initialize' => false))
7373
->will($this->returnValue($this->getForm('1')));
7474
$this->factory->expects($this->at(1))
7575
->method('createNamed')
76-
->with(2, 'text', null, array('property_path' => '[2]', 'max_length' => 10, 'auto_initialize' => false))
76+
->with(2, 'text', null, array('property_path' => '[2]', 'attr' => array('maxlength' => 10), 'auto_initialize' => false))
7777
->will($this->returnValue($this->getForm('2')));
7878

7979
$data = array(1 => 'string', 2 => 'string');
8080
$event = new FormEvent($this->form, $data);
81-
$listener = new ResizeFormListener('text', array('max_length' => '10'), false, false);
81+
$listener = new ResizeFormListener('text', array('attr' => array('maxlength' => 10)), false, false);
8282
$listener->preSetData($event);
8383

8484
$this->assertFalse($this->form->has('0'));
@@ -113,12 +113,12 @@ public function testPreSubmitResizesUpIfAllowAdd()
113113

114114
$this->factory->expects($this->once())
115115
->method('createNamed')
116-
->with(1, 'text', null, array('property_path' => '[1]', 'max_length' => 10, 'auto_initialize' => false))
116+
->with(1, 'text', null, array('property_path' => '[1]', 'attr' => array('maxlength' => 10), 'auto_initialize' => false))
117117
->will($this->returnValue($this->getForm('1')));
118118

119119
$data = array(0 => 'string', 1 => 'string');
120120
$event = new FormEvent($this->form, $data);
121-
$listener = new ResizeFormListener('text', array('max_length' => 10), true, false);
121+
$listener = new ResizeFormListener('text', array('attr' => array('maxlength' => 10)), true, false);
122122
$listener->preSubmit($event);
123123

124124
$this->assertTrue($this->form->has('0'));

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/CollectionTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/CollectionTypeTest.php
+7-4Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function testSetDataAdjustsSize()
3131
$form = $this->factory->create('collection', null, array(
3232
'type' => 'text',
3333
'options' => array(
34-
'max_length' => 20,
34+
'attr' => array('maxlength' => 20),
3535
),
3636
));
3737
$form->setData(array('foo@foo.com', 'foo@bar.com'));
@@ -41,15 +41,18 @@ public function testSetDataAdjustsSize()
4141
$this->assertCount(2, $form);
4242
$this->assertEquals('foo@foo.com', $form[0]->getData());
4343
$this->assertEquals('foo@bar.com', $form[1]->getData());
44-
$this->assertEquals(20, $form[0]->getConfig()->getOption('max_length'));
45-
$this->assertEquals(20, $form[1]->getConfig()->getOption('max_length'));
44+
$formAttrs0 = $form[0]->getConfig()->getOption('attr');
45+
$formAttrs1 = $form[1]->getConfig()->getOption('attr');
46+
$this->assertEquals(20, $formAttrs0['maxlength']);
47+
$this->assertEquals(20, $formAttrs1['maxlength']);
4648

4749
$form->setData(array('foo@baz.com'));
4850
$this->assertInstanceOf('Symfony\Component\Form\Form', $form[0]);
4951
$this->assertFalse(isset($form[1]));
5052
$this->assertCount(1, $form);
5153
$this->assertEquals('foo@baz.com', $form[0]->getData());
52-
$this->assertEquals(20, $form[0]->getConfig()->getOption('max_length'));
54+
$formAttrs0 = $form[0]->getConfig()->getOption('attr');
55+
$this->assertEquals(20, $formAttrs0['maxlength']);
5356
}
5457

5558
public function testThrowsExceptionIfObjectIsNotTraversable()

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/FormTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/FormTypeTest.php
+9-1Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,19 @@ public function testNonReadOnlyFormWithNonReadOnlyParentIsNotReadOnly()
131131
}
132132

133133
public function testPassMaxLengthToView()
134+
{
135+
$form = $this->factory->create('form', null, array('attr' => array('maxlength' => 10)));
136+
$view = $form->createView();
137+
138+
$this->assertSame(10, $view->vars['attr']['maxlength']);
139+
}
140+
141+
public function testPassMaxLengthBCToView()
134142
{
135143
$form = $this->factory->create('form', null, array('max_length' => 10));
136144
$view = $form->createView();
137145

138-
$this->assertSame(10, $view->vars['max_length']);
146+
$this->assertSame(10, $view->vars['attr']['maxlength']);
139147
}
140148

141149
public function testSubmitWithEmptyDataCreatesObjectIfClassAvailable()

‎src/Symfony/Component/Form/Tests/FormFactoryTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/FormFactoryTest.php
+8-8Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ public function testCreateBuilderForPropertyCreatesFormWithHighestConfidence()
399399
->with('Application\Author', 'firstName')
400400
->will($this->returnValue(new TypeGuess(
401401
'text',
402-
array('max_length' => 10),
402+
array('attr' => array('maxlength' => 10)),
403403
Guess::MEDIUM_CONFIDENCE
404404
)));
405405

@@ -408,15 +408,15 @@ public function testCreateBuilderForPropertyCreatesFormWithHighestConfidence()
408408
->with('Application\Author', 'firstName')
409409
->will($this->returnValue(new TypeGuess(
410410
'password',
411-
array('max_length' => 7),
411+
array('attr' => array('maxlength' => 7)),
412412
Guess::HIGH_CONFIDENCE
413413
)));
414414

415415
$factory = $this->getMockFactory(array('createNamedBuilder'));
416416

417417
$factory->expects($this->once())
418418
->method('createNamedBuilder')
419-
->with('firstName', 'password', null, array('max_length' => 7))
419+
->with('firstName', 'password', null, array('attr' => array('maxlength' => 7)))
420420
->will($this->returnValue('builderInstance'));
421421

422422
$this->builder = $factory->createBuilderForProperty('Application\Author', 'firstName');
@@ -450,22 +450,22 @@ public function testOptionsCanBeOverridden()
450450
->with('Application\Author', 'firstName')
451451
->will($this->returnValue(new TypeGuess(
452452
'text',
453-
array('max_length' => 10),
453+
array('attr' => array('maxlength' => 10)),
454454
Guess::MEDIUM_CONFIDENCE
455455
)));
456456

457457
$factory = $this->getMockFactory(array('createNamedBuilder'));
458458

459459
$factory->expects($this->once())
460460
->method('createNamedBuilder')
461-
->with('firstName', 'text', null, array('max_length' => 11))
461+
->with('firstName', 'text', null, array('attr' => array('maxlength' => 11)))
462462
->will($this->returnValue('builderInstance'));
463463

464464
$this->builder = $factory->createBuilderForProperty(
465465
'Application\Author',
466466
'firstName',
467467
null,
468-
array('max_length' => 11)
468+
array('attr' => array('maxlength' => 11))
469469
);
470470

471471
$this->assertEquals('builderInstance', $this->builder);
@@ -493,7 +493,7 @@ public function testCreateBuilderUsesMaxLengthIfFound()
493493

494494
$factory->expects($this->once())
495495
->method('createNamedBuilder')
496-
->with('firstName', 'text', null, array('max_length' => 20))
496+
->with('firstName', 'text', null, array('attr' => array('maxlength' => 20)))
497497
->will($this->returnValue('builderInstance'));
498498

499499
$this->builder = $factory->createBuilderForProperty(
@@ -559,7 +559,7 @@ public function testCreateBuilderUsesPatternIfFound()
559559

560560
$factory->expects($this->once())
561561
->method('createNamedBuilder')
562-
->with('firstName', 'text', null, array('pattern' => '[a-zA-Z]'))
562+
->with('firstName', 'text', null, array('attr' => array('pattern' => '[a-zA-Z]')))
563563
->will($this->returnValue('builderInstance'));
564564

565565
$this->builder = $factory->createBuilderForProperty(

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.