Как создать поле для загрузки нескольких файлов, используя тип формы Symfony? - PullRequest
0 голосов
/ 07 февраля 2019

Я просмотрел документацию, но не ясно, как мы можем создать следующее поле ввода, используя symfony formtype.

<input id="image-file" name="files[]" type="file" multiple>

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вам необходимо понять концепцию загрузки и попытаться реализовать форму Symfony, позволяющую загружать файл правильно и безопасно. Загрузка файла с Symfony
Это туто тоже должно вам помочь Загрузка нескольких файлов с Symfony 4
Для php без фреймворка должно понравиться

define("UPLOAD_DIR", "/path/to/uploaded_file/");

if (!empty($_FILES["files"])) {
    $myFile = $_FILES["files"];

    if ($myFile["error"] !== UPLOAD_ERR_OK) {
        echo "<p>An error occurred.</p>";
        exit;
    }

    // ensure a safe filename
    $name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile["name"]);

    // don't overwrite an existing file
    $i = 0;
    $parts = pathinfo($name);
    while (file_exists(UPLOAD_DIR . $name)) {
        $i++;
        $name = $parts["filename"] . "-" . $i . "." . $parts["extension"];
    }

    // preserve file from temporary directory
    $success = move_uploaded_file($myFile["tmp_name"],
        UPLOAD_DIR . $name);
    if (!$success) {
        echo "<p>Unable to save file.</p>";
        exit;
    }
0 голосов
/ 07 февраля 2019

Попробуйте следующим образом:

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

class ImageFile extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('images', FileType::class, [
                'multiple' => true,
                'attr'     => [
                    'accept' => 'image/*',
                    'multiple' => 'multiple'
                ]
            ])
        ;
    }
}

И измените свойство 'image' на свойство 'images':

/**
 * Set images
 *
 * @param string $images
 *
 * @return satelliteImage[]
 */
public function setImages($images)
{
    $this->images = $images;

    return $this;
}

/**
 * Get images
 *
 * @return string
 */
public function getImages()
{
    return $this->image;
}

public function addImage($image)
{
    $this->images[] = $image;

    return $this;
}
...