【问题标题】:Multiple Image Upload only uploading one image in Symfony 3?多张图片上传只在 Symfony 3 中上传一张图片?
【发布时间】:2016-11-22 10:27:24
【问题描述】:

我正在构建一个函数来将多张图片上传到我们的网站,到目前为止,我的上传表单是这样的:

<?php
namespace Tyson\AdminBundle\Form;

use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;

class IuType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder->add('id', IntegerType::class);
        $builder->add('image', FileType::class, array(
            'attr' => array(
                'multiple' => 'true',
                'data_class' => null
            )
        ));
    }

    public function getName()
    {
        return 'iu';
    }

}

然后在 Twig 文件中显示如下:

  <div class="tabs-panel" id="panel3v">
      {{ form_start(iu,{action:path('admin_upload-images')}) }}

      <div class="row">
          <div class="small-3 medium-3 large-3 columns field-label">
              <label>Image ID</label>
          </div>
          <div class="small-9 medium-9 large-9 columns">
              {{ form_widget(iu.id) }}
              {{ form_errors(iu.id) }}
          </div>
      </div>

      <div class="row">
          <div class="small-3 medium-3 large-3 columns field-label">
              <label>Image Upload</label>
          </div>
          <div class="small-9 medium-9 large-9 columns">
              {{ form_widget(iu.image) }}
              {{ form_errors(iu.image) }}
          </div>
      </div>

      <div class="row">
          <div class="small-6 medium-6 large-6 columns">
              <button type="submit" class="button" id="saveBtn">Save Changes</button>
          </div>
      </div>

      {{ form_end(iu) }}
  </div>

提交后,在测试期间,我将输出表单传递给控制器​​的内容。这是输出:

[files] => Symfony\Component\HttpFoundation\FileBag Object
    (
        [parameters:protected] => Array
            (
                [iu] => Array
                    (
                        [image] => Symfony\Component\HttpFoundation\File\UploadedFile Object
                            (
                                [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 
                                [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => CnY8dRqXYAAoaAw.jpg
                                [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/jpeg
                                [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 35164
                                [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
                                [pathName:SplFileInfo:private] => /tmp/phpibZuVW
                                [fileName:SplFileInfo:private] => phpibZuVW
                            )

                    )

            )

我可以选择一个图像,或者 100 个图像,但在控制器执行其他任何操作之前,表单仍然只传递给我一个图像。

作为参考,这是迄今为止我的控制器的代码:

<?php

namespace Tyson\AdminBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\Security\Core\User\UserInterface;

use Tyson\CoreBundle\Entity\Images;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Form\Form;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;

use Symfony\Component\HttpFoundation\File\UploadedFile;

class UploadController extends Controller
{
    public function uploadimagesAction(Request $request)
    {

        $fs = new Filesystem();

        $dm = $this->getDoctrine()->getManager();

        $dir = '/var/www/html/tyson/web/uploads/images/';

        $request = $this->get('request_stack')->getCurrentRequest();

        $formdet = $request->request->get('iu');
        $imgId = $formdet['id'];

        $folderPath = '/var/www/html/tyson/web/uploads/images/'.$imgId;
        $imgDirectory = '/var/www/html/tyson/web/uploads/images/'.$imgId.'/';

        $folderCheck = $fs->exists($folderPath);

        print_r($request);
        die();

    }

}

我想file 输出应该包含多个到控制器的图像(因为表单提交一次,而不是重复),那么我做错了什么导致这种情况发生?

【问题讨论】:

    标签: php forms symfony image-upload


    【解决方案1】:

    我也有同样的问题

              $builder->add('files', FileType::class, array('required' => false,
                'mapped' => false,
                'attr' => array(
                    'multiple' => true
                ),
            )); 
    

    只提交一个文件。暂时没有适合我的解决方案,我会在上传名称中添加带有 javascript 的 []。

    【讨论】:

      【解决方案2】:

      我在 Symfony 4.2 上遇到了这个问题,fileBag 中的数组中只有 1 个图像,解决方案是在添加多个属性后运行 php bin/console cache:clear

      【讨论】:

        【解决方案3】:

        您是否尝试过使用“multiple”选项(不是“attr”选项中的那个)?

        $builder
            ->add('files', FileType::class, [
                'multiple' => true,
                'attr' => [
                    'multiple' => 'multiple'
                ]
            ]
        ;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-15
          • 2013-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-23
          • 1970-01-01
          相关资源
          最近更新 更多