Класс CrawlerForm
Класс CrawlerForm представляет собой обёртку над HTML-формой,
найденной в документе через Crawler. Объект этого класса
возвращается методами selectButton и selectLink
класса Crawler, а также методом forms. Через
CrawlerForm можно заполнять поля формы, отправлять форму
методом get или set и получать значения полей
через getValues и getPhpValues.
Конструктор класса принимает объект Crawler, узел формы
DOMNode, URI формы и HTTP-метод. Обычно объект создаётся
автоматически при работе с Crawler, а не вручную.
Синтаксис
use Symfony\Component\DomCrawler\Form;
$form = new Form(
Crawler $node,
DOMNode $formNode,
string $uri,
string $method = 'GET'
);
Пример
Давайте найдём форму на странице и получим её URI и метод:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\HttpFoundation\Response;
class FormController extends AbstractController
{
public function index(): Response
{
$html = '<form action="/submit" method="POST">
<input type="text" name="title" value="article">
<input type="text" name="author" value="user">
</form>';
$crawler = new Crawler($html);
$form = $crawler->filter('form')->form();
echo $form->getUri();
echo $form->getMethod();
return new Response();
}
}
?>
Результат выполнения кода:
"/submit"
"POST"
Пример
Давайте заполним поля формы через метод get и получим
значения через getValues:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\HttpFoundation\Response;
class FormController extends AbstractController
{
public function index(): Response
{
$html = '<form action="/submit" method="POST">
<input type="text" name="title" value="article">
<input type="text" name="author" value="user">
</form>';
$crawler = new Crawler($html);
$form = $crawler->filter('form')->form();
$form->get('title')->setValue('hello');
$form->get('author')->setValue('abcde');
print_r($form->getValues());
return new Response();
}
}
?>
Результат выполнения кода:
["title" => "hello", "author" => "abcde"]
Пример
Давайте проверим наличие поля в форме через метод has:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\HttpFoundation\Response;
class FormController extends AbstractController
{
public function index(): Response
{
$html = '<form action="/submit" method="POST">
<input type="text" name="title" value="article">
</form>';
$crawler = new Crawler($html);
$form = $crawler->filter('form')->form();
var_dump($form->has('title'));
var_dump($form->has('author'));
return new Response();
}
}
?>
Результат выполнения кода:
true
false
Смотрите также
-
класс
Crawler,
который выполняет навигацию по HTML-документу -
метод
forms,
который возвращает формы документа -
метод
selectButton,
который выбирает кнопку формы -
метод
getValues,
который возвращает значения полей формы