如何从实体内部获取Web目录路径?

Mik*_*ail 4 symfony symfony-2.1

我研究了如何使用Doctrine处理文件上传,我不想对__DIR__.'/../../../../web/'.$this->getUploadDir();路径进行硬编码,因为将来我可能会更改web/目录.怎么做更灵活?我找到了这个,但它没有回答如何从实体内部更灵活地解决这个问题

Cro*_*zin 6

您不应该在此处使用实体类作为表单模型.它根本不适合那份工作.如果实体具有该path属性,则它可以存储的唯一有效值是:( null如果缺少文件)和表示文件路径的字符串.

  1. 创建一个单独的类,它将成为您的表单的模型:

    class MyFormModel {
         /** @Assert\File */
         private $file;
    
         /** @Assert\Valid */
         private $entity;
    
         // constructor, getters, setters, other methods
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在表单处理程序(通过DIC配置的单独对象;推荐)或控制器中:

    ...
    if ($form->isValid()) {
        /** @var \Symfony\Component\HttpFoundation\File\UploadedFile */
        $file   = $form->getData()->getFile();
    
        /** @var \Your\Entity\Class */
        $entity = $form->getData()->getEntity();
    
        // move the file
        // $path = '/path/to/the/moved/file';
    
        $entity->setPath($path);
    
        $someEntityManager->persist($entity);
    
        return ...;
    }
    ...
    
    Run Code Online (Sandbox Code Playgroud)

在表单处理程序/控制器中,您可以从DIC访问任何依赖项/属性(包括上载目录的路径).


您链接的教程有效,但它是糟糕设计的一个例子.实体应该知道文件上传.