symfony - Symfony:使用 PRE_SUBMIT 表单事件进行功能测试
问题描述
我正在尝试使用 PRE_SUBMIT 表单测试表单,我的 FormType 类如下所示:
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('productType', ChoiceType::class, [
'choices' => [
'Software' => 'software',
'Television' => 'television',
'Giftcard' => 'giftcard',
'Bitte wählen' => '',
],
])
->add('productNumber', TextType::class)
->add('title', TextType::class)
->add('submit', SubmitType::class);
$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event)
{
$form = $event->getForm();
$data = $event->getData();
if ($data['productType'] === 'giftcard') {
$form->add('value', TextType::class);
}
}
);
}
我不知道该怎么做,如果我提交这样的表格,我只能达到字段值。
$client->submitForm('Submit', [
'product[productType]' => 'giftcard',
'product[productNumber]' => 'C123123',
'product[title]' => 'TestCard',
]);
我不能像这样进行第二次提交。但是第一次提交后表单看起来很好。希望有人可以帮助我或给我一些建议。
解决方案
我用预先提交的表格这样做了。现在它工作正常。如果要使用此事件添加新值,则在第一次提交后再次关闭爬虫并将值添加到表单中。
public function testRedirectAfterCreateGiftcard(): void
{
$client = static::createClient([
'debug' => false,
]);
$crawler = $client->request('GET', 'https://localhost/product/create');
$client->followRedirects();
$form = $crawler->selectButton('Submit')->form();
$values = $form->getPhpValues();
$values['product']['productType'] = 'giftcard';
$values['product']['productNumber'] = 'B122222';
$values['product']['title'] = 'Test';
$client->request($form->getMethod(), $form->getUri(), $values, $form->getPhpFiles());
$form->setValues($values);
$client->submitForm('Submit');
$form2 = $client->getCrawler()->selectButton('Submit')->form();
$values2 = $form2->getPhpValues();
$values2['product']['value'] = '25';
$form2->setValues($values2);
$client->submit($form2);
$this->assertRouteSame('app_product_view', ['productType' => 'giftcard']);
}
推荐阅读
- arrays - 在 Bigquery 中重新排序包含字符串的数组中的值
- wordpress - 获取当前发货区域
- flutter - Dart null 安全性...不识别是否块
- ios - UIImagePickerController 的替代品,用于拍摄曝光的照片/视频
- python - Python griddata 函数改变变量的极值
- netlogo - 如何在 Netlogo 中的 foreach 命令中关闭多个链接后更新链接列表
- python - 向 Pandas DF 添加新列,为每一行执行基本数学方程以确定值
- algorithm - 想为这个问题找到合适的数据结构吗?
- google-signin - 使用“谷歌登录令牌”到另一个服务
- docker - docker 镜像的默认命令