feature #33609 [Form][SubmitType] Add "validate" option (fancyweb)
This PR was merged into the 4.4 branch.
Discussion
----------
[Form][SubmitType] Add "validate" option
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Tickets | https://github.com/symfony/symfony/issues/8763
| License | MIT
| Doc PR | TODO
The second part of the ticket requires more work but is kind of unrelated.
Commits
-------
a2bc06d811
[Form][SubmitType] Add "validate" option
This commit is contained in:
commit
b00b633665
@ -11,6 +11,7 @@ CHANGELOG
|
|||||||
* The type guesser guesses the HTML accept attribute when a mime type is configured in the File or Image constraint.
|
* The type guesser guesses the HTML accept attribute when a mime type is configured in the File or Image constraint.
|
||||||
* Overriding the methods `FormIntegrationTestCase::setUp()`, `TypeTestCase::setUp()` and `TypeTestCase::tearDown()` without the `void` return-type is deprecated.
|
* Overriding the methods `FormIntegrationTestCase::setUp()`, `TypeTestCase::setUp()` and `TypeTestCase::tearDown()` without the `void` return-type is deprecated.
|
||||||
* marked all dispatched event classes as `@final`
|
* marked all dispatched event classes as `@final`
|
||||||
|
* Added the `validate` option to `SubmitType` to toggle the browser built-in form validation.
|
||||||
|
|
||||||
4.3.0
|
4.3.0
|
||||||
-----
|
-----
|
||||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Form\AbstractType;
|
|||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\Form\SubmitButtonTypeInterface;
|
use Symfony\Component\Form\SubmitButtonTypeInterface;
|
||||||
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A submit button.
|
* A submit button.
|
||||||
@ -26,6 +27,19 @@ class SubmitType extends AbstractType implements SubmitButtonTypeInterface
|
|||||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||||
{
|
{
|
||||||
$view->vars['clicked'] = $form->isClicked();
|
$view->vars['clicked'] = $form->isClicked();
|
||||||
|
|
||||||
|
if (!$options['validate']) {
|
||||||
|
$view->vars['attr']['formnovalidate'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
|
{
|
||||||
|
$resolver->setDefault('validate', true);
|
||||||
|
$resolver->setAllowedTypes('validate', 'bool');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\Form\Tests;
|
|||||||
|
|
||||||
use PHPUnit\Framework\SkippedTestError;
|
use PHPUnit\Framework\SkippedTestError;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\PercentType;
|
use Symfony\Component\Form\Extension\Core\Type\PercentType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||||
use Symfony\Component\Form\Extension\Csrf\CsrfExtension;
|
use Symfony\Component\Form\Extension\Csrf\CsrfExtension;
|
||||||
use Symfony\Component\Form\FormError;
|
use Symfony\Component\Form\FormError;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
@ -2730,4 +2731,38 @@ abstract class AbstractLayoutTest extends FormIntegrationTestCase
|
|||||||
'
|
'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider submitFormNoValidateProvider
|
||||||
|
*/
|
||||||
|
public function testSubmitFormNoValidate(bool $validate)
|
||||||
|
{
|
||||||
|
$this->requiresFeatureSet(404);
|
||||||
|
|
||||||
|
$form = $this->factory->create(SubmitType::class, null, [
|
||||||
|
'validate' => $validate,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$html = $this->renderWidget($form->createView());
|
||||||
|
|
||||||
|
$xpath = '/button
|
||||||
|
[@type="submit"]
|
||||||
|
';
|
||||||
|
|
||||||
|
if (!$validate) {
|
||||||
|
$xpath .= '[@formnovalidate="formnovalidate"]';
|
||||||
|
} else {
|
||||||
|
$xpath .= '[not(@formnovalidate="formnovalidate")]';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertMatchesXpath($html, $xpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function submitFormNoValidateProvider()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[false],
|
||||||
|
[true],
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,4 +62,11 @@ class SubmitTypeTest extends ButtonTypeTest
|
|||||||
|
|
||||||
$this->assertSame($form, $form->add('send', static::TESTED_TYPE));
|
$this->assertSame($form, $form->add('send', static::TESTED_TYPE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFormNoValidate()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->factory->create(static::TESTED_TYPE, null, [
|
||||||
|
'validate' => false,
|
||||||
|
])->createView()->vars['attr']['formnovalidate']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user