Php 将参数从控制器传递到侦听器

Php 将参数从控制器传递到侦听器,php,symfony,doctrine,Php,Symfony,Doctrine,我阅读本教程是为了设置一个Listener来上传和编辑实体中的文件: 我想将动态参数从控制器传递到服务。我修改了FileUploader,从控制器中提供路径和文件名。但我无法从DoctrineEventListener获取这些参数 我的文件上载程序: /** * @param UploadedFile $file * @param string $name * @return string $fileName */ public function getUniqueName(Up

我阅读本教程是为了设置一个Listener来上传和编辑实体中的文件:

我想将动态参数从控制器传递到服务。我修改了FileUploader,从控制器中提供路径和文件名。但我无法从DoctrineEventListener获取这些参数

我的文件上载程序:

    /**
 * @param UploadedFile $file
 * @param string $name
 * @return string $fileName
 */
public function getUniqueName(UploadedFile $file, $name) {
    $fileName = $name.'_'.md5(uniqid()).'.'.$file->guessExtension();

    return $fileName;
}
/**
 * @param UploadedFile $file
 * @param string $targetDir
 * @param string $name
 * @return string
 */
public function uploadImage(UploadedFile $file, $targetDir, $name)
{
    $fileName = $this->getUniqueName($file, $name);

    if ($file->guessExtension() == 'gif' || $file->guessExtension() == 'jpeg' ||
        $file->guessExtension() == 'pjpeg' || $file->guessExtension() == 'png')
    {
        $file->move($targetDir, $fileName);
        return $fileName;
    }
    else {
        return 'Type de photo non supporté. Veuillez choisir un fichier .png ou .jpg.';
    }

}

我的其余代码与教程中的代码相同。

您下面的示例基于控制器根本不参与此文件上载的想法,即,如果您需要从控制器传递一些参数,我不太清楚为什么要使用此示例作为基础?您可以看看基本的symfony文件上载示例,如果适用,可以使用自定义注释,或者只需将所需的附加数据存储到实体中并从实体中获取数据(这与使用侦听器的概念不太相符)…实际上,我让上传过程在没有控制器和服务的示例的情况下工作。但是我在设置编辑过程时遇到了一些问题。我试过使用你链接的文档,但不起作用,所以我尝试了其他方法,但在阅读了你的文章后,我认为在你的案例中它不起作用,ejuhjav的第二个选项可能是最干净的—在持久化之前将其他数据保存到实体中,然后它将在侦听器中可用。编辑过程中遇到的具体问题是什么?链接中的示例似乎也涵盖了编辑案例(无论是在没有提供新文件的情况下还是在提供新文件的情况下)?问题是,当我转到编辑表单时,保存到实体中的文件不会显示,如果我提交它,我会出现一个验证错误,说明它不能为空。正如你所说,我使用的链接不适合我的情况。我尝试使用文档,但即使在创建文件对象并将其设置到实体中时,也会出现相同的错误