Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 错误:";找不到该文件";使用Symfony2上传文件_Php_Ajax_Symfony_Doctrine Orm - Fatal编程技术网

Php 错误:";找不到该文件";使用Symfony2上传文件

Php 错误:";找不到该文件";使用Symfony2上传文件,php,ajax,symfony,doctrine-orm,Php,Ajax,Symfony,Doctrine Orm,我正在尝试在我的应用程序中上载图像以将其存储在数据库中,下面是以下代码: 控制器: public function createAction(Request $request) { $entity = new Student(); $form = $this->createCreateForm($entity); $form->handleRequest($request); if ($form->isValid()) {

我正在尝试在我的应用程序中上载图像以将其存储在数据库中,下面是以下代码:

控制器:

public function createAction(Request $request)
{        
    $entity = new Student();
    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);

    if ($form->isValid()) {
       $file = $entity->getPhoto();

       $fileName = md5(uniqid()).'.'.$file->guessExtension();

       $photoDir = $this->container->getParameter('kernel.root_dir').'/../web/uploads/images';

       $file->move($photoDir, $fileName);

       $entity->setPhoto($fileName);

       $em = $this->getDoctrine()->getManager();
       $em->persist($entity);
       $em->flush();

      return $this->redirect($this->generateUrl('student_show', array('id' => $entity->getId())));
    }
    return $this->render('BackendBundle:Student:new.html.twig', array(
        'entity' => $entity,
        'form'   => $form->createView(),
    ));
}
实体:

   use Doctrine\ORM\Mapping as ORM;
   use Symfony\Component\Validator\Constraints as Assert;

   //...
   /**
   * @var string
   *
   * @ORM\Column(name="photo", type="string", length=255, nullable=true)
   * @Assert\File(mimeTypes={ "image/png","image/jpg" })
   */
   private $photo;


   public function setPhoto($photo)
   {
    $this->photo = $photo;

    return $this;
   }

   public function getPhoto()
   {
    return $this->photo;
   }
表单类型:

   //...

   ->add('photo', 'file', array('required' => false))

   //...
有了这段代码,我得到了错误消息:“文件找不到”,我不知道如何修复它来保存上传的文件

更新:我认为错误在于我之前发出的ajax请求,它没有正确地发送文件字段。如何通过ajax正确发送这种类型的字段?我已经在这个字段中显示了发送Ajax请求的值,该值为“开”,所以我认为这就是问题所在


解决方案:我已经解决了代码中的更改问题:

  • data:newformdata($(this)[0])
    而不是
    data:$(this).serialize()

  • 添加ajax请求:

    processData:false,
    contentType:false,
    cache:false,

并且文件已正确发送。

您缺少一些代码,如:

$form = $this->createForm(new ProductType(), $product);
$form->handleRequest($request);

您的请求数据未与实体绑定,这就是出现错误的原因。请再次检查您收到的链接

Hi@AshokChitroda,您说我添加了代码,这里只放了一些与上传文件相关的代码。如果您问题中的代码没有反映这一点,那么很难为您提供帮助。请按原样更新你的问题。嗨@xabbuh,我已经更新了代码。顺便说一下,当我按照官方文档更改代码时,然后运行
app/console-doctor:schema:update--force
。这样数据库中的表就会被更新,应该可以正常工作了吧?或者是有什么别的事情要做来更新我上面的代码?你从哪里得到这个错误的?这是验证错误还是PHP错误?这是您收到的确切错误消息吗?嗨@xabbuh,这是一个表单验证错误。我目前正在做一个ajax调用提交并返回错误消息。看看我发布的另一个帖子,我采用了另一种方式,似乎没问题,但我又遇到了另一个错误。你确定该文件是通过AJAX调用发送的吗?当您不通过AJAX请求提交表单时,它是否有效?顺便说一句,如果你不断地修改代码并用修改过的代码发布新问题,而旧问题仍然没有得到回答,你将很难得到正确的答案。嗨@xabbuh,很抱歉,我在进行过程中提出了不同的问题,因为针对同一问题的其他代码和我收到的其他错误消息都认为相同,并帮助查看解决方案。现在我正在尝试其他代码,消息仍然没有发出Ajax请求,symfony显示alvalidar表单。您好@xabbuh,奇迹般地,我在没有Ajax请求的情况下测试了表单symfony,正如您告诉我的,并向我显示了以下内容:
无法在“/opt/lampp/htdocs/symfony/app/./web/uploads/images”中写入目录
据我所知,该错误是由于目标目录中的许可证问题造成的。非常感谢你的奉献精神。