将变量从表单事件侦听器传递给控制器​​?

时间:2015-04-15 12:07:27

标签: symfony symfony-forms

我有一个与表单类型相关联的事件监听器,它运行此代码:

 $builder->addEventListener(
        FormEvents::POST_SUBMIT,
        function (FormEvent $event) use ($options) {

            $entity = $event->getData();

            $baseUrl= $options['baseUrl'];

            $fileNameOr="";
            $nombreFicheroInterno = $entity->getFile();

            $file = $entity->getFile();
            $fileName = $file->getClientOriginalName();

            $filePars = explode('.', $fileName);
            $fileNameOr = $filePars[0];
            $fileExtension = $filePars[1];

            if ($fileExtension == 'CSV' || $fileExtension == 'csv') {
                    $fileExtensionType = 2;
            } else if ($fileExtension == 'TXT' || $fileExtension == 'txt') {
                    $fileExtensionType = 1;
            }
            $separatorType= $entity->getSeparatorType()->getId();
            $numLineasCabecera = $entity->getHeadLinesNumber();
            $algoritmoTecnica = $entity->getAnalysisType()->getId();
            $algoritmoMetodo = $entity->getSubanalysisType()->getMethod();


            $filename = sha1(uniqid(mt_rand(), true)) . '.' . $nombreFicheroInterno->guessExtension();


            $nombreFicheroInterno->move($baseUrl . 'DBSpectra/MuestrasTemp', $filename);


            $res=shell_exec('sh '.$baseUrl.'run_DBSpectralMatching.sh /usr/local/MATLAB/MATLAB_Compiler_Runtime/v81/ "'.$baseUrl.'" "'.$fileNameOr.'" "'.$filename.'" "['.$fileExtensionType.' '. $separatorType .' '.$numLineasCabecera.' '.$algoritmoTecnica.' '.$algoritmoMetodo. ' ' . '8888' .']"');

                           $baseUrl . 'DBSpectra/Resultados/' . $compoundId . '-MathDecision.' . $nombreTecnica . '.txt'
             );

如您所见,代码从提交的表单中获取数据并执行Matlab算法。根据算法的结果($res),响应将是一个或另一个。

如何将算法的变量$res传递给控制器​​以给出一个或另一个响应?或者我应该将代码直接放在eventlistener中的控制器中吗?

1 个答案:

答案 0 :(得分:0)

提供的任何解决方案都是一种解决方法。只是因为没有单一的原因你必须从表单监听器中调用MatLab。

只需验证表单,从控制器中获取所需的值,然后执行MatLab。