如何使用Symfony2对数据进行后台解析?

rot*_*erd 4 php parsing background symfony

我用PHP编写了一个带有Symfony2的Web应用程序.用户可以上载包含保存到数据库的数据的CSV文件.解析CSV文件的每一行大约持续0.2秒,因为我向Google Maps API提出了一些请求.

因此,当您上传包含5000行的CSV文件时,这在我的应用程序中是一个实际情况,解析整个文件可能需要16分钟.

我不希望用户必须等待16分钟,直到他可以继续使用我的应用程序.所以我的问题是:如何在后台解析CSV文件,以便用户可以继续浏览?

Mun*_*Das 7

您可以创建一个kernel.terminate事件监听器并在那里进行解析.响应发送到浏览器后会触发此事件.样本实施将是,

服务申报,

//services.yml
csv_parse_listener:
    class: FQCN\Of\CsvParseListener
    tags:
        - { name: kernel.event_listener, event: kernel.terminate, method: onKernelTerminate }
Run Code Online (Sandbox Code Playgroud)

听众课,

namespace Your\namespace;
use Symfony\Component\HttpKernel\Event\PostResponseEvent;

class CsvParseListener
{
    public function onKernelTerminate(PostResponseEvent $event)
    {
        $request = $event->getRequest();
        if($request->get('_route') !== "Your_route"){
            return;
        }

        $csvFile = $request->files->get('file_field_name');

        //move file using $csvFile->move()
        //read and parse
    }
}
Run Code Online (Sandbox Code Playgroud)