Метод disableValidation
Метод disableValidation класса CrawlerForm
отключает валидацию полей формы перед отправкой.
По умолчанию Symfony проверяет, что все обязательные
поля заполнены, а значения соответствуют типам.
Если хотя бы одно поле не проходит проверку,
форма не отправляется и выбрасывается исключение.
Метод не принимает параметров и возвращает объект
CrawlerForm, что позволяет использовать
цепочку вызовов.
Синтаксис
$form->disableValidation();
Пример
Давайте создадим форму с обязательным полем и попробуем отправить её без заполнения. Сначала рассмотрим форму без отключения валидации:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\DomCrawler\Crawler;
class FormController extends AbstractController
{
public function index(): Response
{
$client = HttpClient::create();
$crawler = new Crawler();
$crawler->addHtmlContent('
<form action="/submit" method="post">
<input type="text" name="title" required>
<button type="submit">Send</button>
</form>
');
$form = $crawler->filter('form')->form();
try {
$client->request('POST', $form->getUri(), [
'body' => $form->getValues(),
]);
} catch (\Exception $e) {
return new Response('Form is not valid: ' . $e->getMessage());
}
return new Response('Form submitted');
}
}
?>
Результат выполнения кода:
"Form is not valid: The form is not valid"
Пример
Теперь отключим валидацию с помощью метода
disableValidation и отправим ту же форму:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\DomCrawler\Crawler;
class FormController extends AbstractController
{
public function index(): Response
{
$client = HttpClient::create();
$crawler = new Crawler();
$crawler->addHtmlContent('
<form action="/submit" method="post">
<input type="text" name="title" required>
<button type="submit">Send</button>
</form>
');
$form = $crawler->filter('form')->form();
$form->disableValidation();
$client->request('POST', $form->getUri(), [
'body' => $form->getValues(),
]);
return new Response('Form submitted');
}
}
?>
Результат выполнения кода:
"Form submitted"
Пример
Давайте отключим валидацию и заполним поле значением
'abcde' перед отправкой. Метод
disableValidation возвращает объект формы,
поэтому его можно объединить в цепочку с методом
set:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\DomCrawler\Crawler;
class FormController extends AbstractController
{
public function index(): Response
{
$client = HttpClient::create();
$crawler = new Crawler();
$crawler->addHtmlContent('
<form action="/submit" method="post">
<input type="text" name="title" required>
<input type="text" name="body" required>
<button type="submit">Send</button>
</form>
');
$form = $crawler->filter('form')->form();
$form->disableValidation();
$form->set('title', 'abcde');
$values = $form->getValues();
return new Response(json_encode($values));
}
}
?>
Результат выполнения кода:
{"title": "abcde", "body": ""}
Смотрите также
-
класс
CrawlerForm,
который представляет форму на странице -
метод
set,
который задаёт значение поля формы -
метод
getValues,
который возвращает значения полей формы -
метод
has,
который проверяет наличие поля в форме