Symfony 表单从 CSV 文件检索数据并将其注入数据库

Shi*_*ika 4 php forms csv symfony twig

我不明白如何使用 FileType 表单从 csv 检索数据并将其注入数据库。

使用正常形式,我可以毫无问题地检索数据。

//Controller.php

        $data = new Data();

        $form = $this->createFormBuilder($data)
                        ->add('name')
                        ->add('Nbmessage', IntegerType::class)
                        ->add('status')
                        ->add('details')
                        ->getForm();

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid())
        {
            $em->persist($data);
            $em->flush();
        }
---------------------------------------------------------------

// import.html.twig

    {{ form_start(form)}}


    {{ form_widget(form) }}
        <button type="submit" class="btn btn-success">Add</button>

    {{ form_end(form)}}

Run Code Online (Sandbox Code Playgroud)

但我想用 Symfony 表单获取 csv 中的数据格式。

经过多次尝试,这就是我目前所处的位置

        $form2 = $this->createFormBuilder()
        ->add('submitFile', FileType::class)
        ->getForm();


        if ($request->getMethod('post') == 'POST') {

         $form2->handleRequest($request);


        if ($form2->isSubmitted() && $form2->isValid()) {

            $file = $form2->get('submitFile');


            $file->getData();
          }

        } 
Run Code Online (Sandbox Code Playgroud)

我已经找了一个星期了...我真的不明白该怎么做。

msg*_*msg 6

调用getData()aFileType将返回一个UploadedFile实例。这代表传输后服务器中的文件。然后,您必须按照您认为合适的方式处理它:如果是简单的上传,请将其移动到文件夹,或者像您的情况一样,进行一些进一步的处理。

您可能决定使用库而不是内置函数,但希望这能让您上路:

function upload(Request $request, EntityManager $em)
{
    // Form creation ommited
    $form2->handleRequest($request);
    
    if ($form2->isSubmitted() && $form2->isValid()) {
        /** @var UploadedFile */
        $file = $form2->get('submitFile')->getData();   
        
        // Open the file
        if (($handle = fopen($file->getPathname(), "r")) !== false) {
            // Read and process the lines. 
            // Skip the first line if the file includes a header
            while (($data = fgetcsv($handle)) !== false) {
                // Do the processing: Map line to entity, validate if needed
                $entity = new Entity();
                // Assign fields
                $entity->setField1($data[0]);
                $em->persist($entity);
            }
            fclose($handle);
            $em->flush();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)