为什么我不能在功能测试(Symfony 5.1)中获取表单输入的值属性?
Why can't I get value-attribute of form input in functional test (Symfony 5.1)?
我正在用 DomCrawler Component in a Symfony 5.1 application. I read the docs as well as previous questions (another) 在 phpunit 中编写一个表单的功能测试,但我无法让它工作。
测试应检查:
- 登录(有效)
- 转到用户概述(有效)
- 点击编辑用户列表中的第一项(有效)
- 检查表单显示的数据是否正确(失败)
我能够获取表单输入的所有属性,除了 value 属性。表单编辑页的url为/user-action?user=2
.
我的测试是这样的:
public function testIfDisplayedInfosAreCorrect()
{
$crawler = $this->client->clickLink('Edit'); // from user overview -> click edit
// $crawler->getUri() returns "/user-action?user=2" at this point (which is fine)
// $crawler->filter('#user_firstname')->attr('class') returns the class names of the form input
// $crawler->filter('#user_firstname')->attr('value') returns null
$form = $crawler->selectButton('Save')->form();
$firstName = $form->get('user[firstname]')->getValue(); // returns null
$this->assertSame("Admin", $firstName); // fails
}
为什么我获取不到表单元素的值?我希望我的意思很清楚,否则请告诉我。
编辑:为所有输入字段转储所有具有 $form->getValues();
和 returns 空字符串的值。
编辑 2:控制器如下所示:
/**
* @Route("/user-action", name="app_user_action")
*/
public function createAndEditUser(
Request $request,
EntityManagerInterface $entityManager,
SluggerInterface $slugger,
UserPasswordEncoderInterface $passwordEncoder,
UserHelper $userHelper): Response
{
if(isset($_GET['user'])) {
$user = $entityManager->getRepository(User::class)->find($_GET['user']);
$email = $user->getEmail();
} else {
$user = new User();
$email = '';
}
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
// parse input
// create or edit object
// flush into db
return $this->redirectToRoute('app_users');
}
return $this->render('pages/user/action.html.twig', [
'form' => $form->createView(),
'email' => $email
]);
}
编辑:解决方案:感谢@DonCallisto 使用参数转换器的提示,我删除了 $_GET
并使用了 Symonfy 的 annotations for routing,这解决了无法拥有 [=15= 的问题] 解析为 true
.
if(isset($_GET['user']))
将 return false
,因此您在表单中没有任何数据。
顺便说一句,你不应该使用 $_GET
,但你可以利用 ParamConverter 并最终在 URL.
中传递用户 ID
我正在用 DomCrawler Component in a Symfony 5.1 application. I read the docs as well as previous questions (another) 在 phpunit 中编写一个表单的功能测试,但我无法让它工作。
测试应检查:
- 登录(有效)
- 转到用户概述(有效)
- 点击编辑用户列表中的第一项(有效)
- 检查表单显示的数据是否正确(失败)
我能够获取表单输入的所有属性,除了 value 属性。表单编辑页的url为/user-action?user=2
.
我的测试是这样的:
public function testIfDisplayedInfosAreCorrect()
{
$crawler = $this->client->clickLink('Edit'); // from user overview -> click edit
// $crawler->getUri() returns "/user-action?user=2" at this point (which is fine)
// $crawler->filter('#user_firstname')->attr('class') returns the class names of the form input
// $crawler->filter('#user_firstname')->attr('value') returns null
$form = $crawler->selectButton('Save')->form();
$firstName = $form->get('user[firstname]')->getValue(); // returns null
$this->assertSame("Admin", $firstName); // fails
}
为什么我获取不到表单元素的值?我希望我的意思很清楚,否则请告诉我。
编辑:为所有输入字段转储所有具有 $form->getValues();
和 returns 空字符串的值。
编辑 2:控制器如下所示:
/**
* @Route("/user-action", name="app_user_action")
*/
public function createAndEditUser(
Request $request,
EntityManagerInterface $entityManager,
SluggerInterface $slugger,
UserPasswordEncoderInterface $passwordEncoder,
UserHelper $userHelper): Response
{
if(isset($_GET['user'])) {
$user = $entityManager->getRepository(User::class)->find($_GET['user']);
$email = $user->getEmail();
} else {
$user = new User();
$email = '';
}
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
// parse input
// create or edit object
// flush into db
return $this->redirectToRoute('app_users');
}
return $this->render('pages/user/action.html.twig', [
'form' => $form->createView(),
'email' => $email
]);
}
编辑:解决方案:感谢@DonCallisto 使用参数转换器的提示,我删除了 $_GET
并使用了 Symonfy 的 annotations for routing,这解决了无法拥有 [=15= 的问题] 解析为 true
.
if(isset($_GET['user']))
将 return false
,因此您在表单中没有任何数据。
顺便说一句,你不应该使用 $_GET
,但你可以利用 ParamConverter 并最终在 URL.