Ошибка ОГРАНИЧЕНИЯ ЦЕЛОСТНОСТИ загрузчика Symfony2 Vich

Ошибка, которую я получаю, здесь ...

Возникла исключительная ситуация при выполнении 'INSERT INTO users (image_name, updated_at, email, first_name, last_name, start_weight) VALUES (?,?,?,?,?,?)' С params [null, "2015-08-13 04: 52:18 "," [email protected] "," rick "," mason "," 200 "]:

SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец 'image_name' не может быть пустым

Это Сущность ..

<?php
namespace AppBundle\Entity;

use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 * @UniqueEntity("email", message="That email is already in use")
 * @Vich\Uploadable
 */
class User
{

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @Vich\UploadableField(mapping="profile_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;

    /**
     * @Assert\NotBlank()
     * @Assert\Email(message="Must be a valid email.")
     * @ORM\Column(type="string", length=50)
     */
    private $email;

    /**
     * @Assert\NotBlank()
     * @Assert\Regex("/^[a-zA-Z -']+$/")
     * @ORM\Column(type="string", length=50)
     */
    private $first_name;

    /**
     * @Assert\NotBlank()
     * @Assert\Regex(pattern = "/^[a-zA-Z -']+$/", message="Name must be only letters.")
     * @ORM\Column(type="string", length=50, unique=true)
     */
    private $last_name;

    /**
     * @Assert\NotBlank()
     * @Assert\Type(type="numeric")
     * @Assert\GreaterThan(value=70)
     * @ORM\Column(type="decimal")
     */
    public $start_weight;

    /**
     * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
     */
    public function setImageFile(File $image = null) {
        $this->imageFile = $image;
        if ($image) {
            $this->updatedAt = new \DateTime('now');
        }
    }

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

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

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

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
        return $this;
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set first_name
     *
     * @param string $firstName
     * @return User
     */
    public function setFirstName($firstName)
    {
        $this->first_name = $firstName;
        return $this;
    }

    /**
     * Get first_name
     *
     * @return string 
     */
    public function getFirstName()
    {
        return $this->first_name;
    }

    /**
     * Set last_name
     *
     * @param string $lastName
     * @return User
     */
    public function setLastName($lastName)
    {
        $this->last_name = $lastName;
        return $this;
    }

    /**
     * Get last_name
     *
     * @return string 
     */
    public function getLastName()
    {
        return $this->last_name;
    }

    /**
     * Set start_weight
     *
     * @param string $startWeight
     * @return User
     */
    public function setStartWeight($startWeight)
    {
        $this->start_weight = $startWeight;

        return $this;
    }

    /**
     * Get start_weight
     *
     * @return string 
     */
    public function getStartWeight()
    {
        return $this->start_weight;
    }

    public function __toString() {
        return $this->start_weight;
    }


}

Это тип формы

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

/**
* 
*/
class UserType extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('email', 'email', array('label' => "Your Email", 
                                            'attr' => array(
                                                    'placeholder' => 'Enter Email',
                                                    'class' => 'form-control')))
            ->add('first_name', 'text', array('label'=>'First Name',
                                                'attr' => array(
                                                    'placeholder' => "Enter First Name",
                                                    'class' => 'form-control')))
            ->add('last_name', 'text', array('label'=>'Last Name',
                                                'attr'=> array(
                                                    'placeholder' => "Your Last Name",
                                                    'class' => 'form-control')))
            ->add('start_weight', 'text', array('label' => "Your Current Weight",
                                                'attr' => array(
                                                    'class' => "form-control",
                                                    'placeholder' => "Enter Weight")))
            ->add('imageFile', 'file')
            ->add('submit', 'submit', array('label' => "Sign Up!",
                                                'attr' => array(
                                                    'class' => 'btn btn-md btn-primary')));
}

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

Интересно то, что у меня есть два отдельных проекта. Оба они по коду ТОЧНО ОДИНАКОВЫЕ. Код работает в одном проекте и не работает в другом. У меня есть дампер в действии, я запускаю его на _FILES и получаю код ошибки 0, так что в этом нет ничего плохого. Загрузка действительно происходит. В ядре у меня есть umask (0000) в обоих случаях, поэтому я знаю, что у меня нет проблем с правами доступа.

Я ничего не могу найти, почему это происходит.


person Rick Mason    schedule 13.08.2015    source источник
comment
привет, Рик, ты когда-нибудь это исправлял? У меня такая же проблема   -  person Splendonia    schedule 18.01.2016


Ответы (2)


Одна из возможных причин этого может заключаться в том, что слушатели VichUploaderBundle не запускаются. Вы пробовали очистить кеш?

person K-Phoen    schedule 13.08.2015
comment
Извините, я должен был сказать об этом в своем исходном посте. Я очистил кеш. Я даже сделал команду rm -rF в app / cache / dev *, чтобы убедиться! - person Rick Mason; 13.08.2015

Я понимаю, что это старый вопрос, но он появляется в поиске Google и кажется наиболее актуальным. Я думал, что смогу помочь любому, кто столкнется с этой проблемой. Я бы добавил комментарий, но у меня нет репутации для этого.

Исходный вопрос не содержит подробностей о config.yml, проверка конфигурации была для меня ключом к решению проблемы.

Отображение сущности:

* @Vich\UploadableField(mapping="profile_image", fileNameProperty="imageName")

Требуется соответствующее отображение в config.yml

vich_uploader:
    db_driver: orm
    mappings:
        profile_image:
            uri_prefix: /profile/images
            upload_destination: '%kernel.root_dir%/../web/profile/images'

Если вы следовали документации, инструкции вы могли настроить отображение в config.yml как product_image, а не profile_image. Легко забыть обновить свое отображение, если вы решите изменить его для своей сущности.

person Sean Tasker    schedule 08.11.2016