VichUploaderBundle: имя_изображения не может быть нулевой ошибкой

Я использую Symfony3.1, и я только что установил VichUploaderBundle. Я следовал за документацией, но я получаю эту ошибку означает, что Поле 'имя_изображения' не может быть пустым (ноль)

SQLSTATE [23000]: нарушение ограничения целостности: 1048 Le champ 'image_name' ne peut être vide (null)

конфиг

vich_uploader:
db_driver: orm
mappings:
    product_image:
        uri_prefix:         /images/actualites
        upload_destination: kernel.root_dir/../web/images/actualites

        inject_on_load:     false
        delete_on_update:   true
        delete_on_remove:   true

лицо

/**
 *
 * @Vich\UploadableField(mapping="actualite_image", fileNameProperty="imageName")
 *
 * @var File
 */
private $imageFile;

/**
 * @ORM\Column(type="string", length=255)
 *
 * @var string
 */
private $imageName;

/**
 * @ORM\Column(type="datetime")
 *
 * @var \DateTime
 */
private $updatedAt;

/**
 * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
 *
 * @return Actualite
 */

public function setImageFile(File $image = null)
{
    $this->imageFile = $image;

    if ($image) {
        // It is required that at least one field changes if you are using doctrine
        // otherwise the event listeners won't be called and the file is lost
        $this->updatedAt = new \DateTime('now');
    }

    return $this;
}

/**
 * @return File
 */
public function getImageFile()
{
    return $this->imageFile;
}

/**
 * @param string $imageName
 *
 * @return Actualite
 */
public function setImageName($imageName)
{
    $this->imageName = $imageName;

    return $this;
}

/**
 * @return string
 */
public function getImageName()
{
    return $this->imageName;
}

FormType:

->add('imageFile', FileType::class)

прут

<form class="form-horizontal" method="post" enctype="multipart/form-data">
 //...
 {{ form_widget(form.imageFile) }}

действие

public function creerAction(Request $request)
{
    $entity = new Actualite();
    $form = $this->createForm(BaseType::class, $entity);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

        return $this->redirectToRoute('backend_actualite_liste');
    }

    return $this->render('Backend/Actualite/creer.html.twig',array(
            'form' => $form->createView(),
        )
    );
}

3 ответа

Решение

Таким образом, на самом деле, в соответствии с тем, что он сказал, это изменение, необходимое для app/config/config.yml файл:

vich_uploader:
    db_driver: orm
    mappings:
        actualite_image:
            uri_prefix:         /images/actualites
            upload_destination: kernel.root_dir/../web/images/actualites

Примечание для hous: вам не нужны эти последние 3 параметра в файле config.yml, так как они используются по умолчанию

решаемая

Ошибка в том, что имя сопоставления загрузки в конфигурации и имя сопоставления в сущности различаются, но они должны совпадать.

В файле конфигурации это product_image, а в сущности - actualite_image.

Теперь я даю им то же имя, и теперь оно работает хорошо.

Как примечание, здесь есть другие настройки Symfony3, которые могут быть полезны.

Я думаю, что для вашей настройки, это другое для Symfony3. Попробуй это:

->add('imageFile', VichImageType::class, array(
    'required'      => false,
))

Кроме того, вам нужно это изменение тоже:

# app/config/config.yml
twig:
    form_themes:
        # other form themes
        - 'VichUploaderBundle:Form:fields.html.twig'
Другие вопросы по тегам