为什么我不能在功能测试(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