Symfony2 Vich Uploader Ошибка ограничения целостности

Я получаю ошибку здесь...

Возникла исключительная ситуация при выполнении 'INSERT INTO users (image_name, updated_at, email, first_name, last_name, start_weight) VALUES (?,?,?,?,?,?)' С параметрами [null, ”2015-08-13 04:52:18", "wei23849@aldkfj.com", " Рик "," Мейсон "," 200 "]:

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

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

<?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) в обоих случаях, поэтому я знаю, что у меня нет проблем с разрешениями.

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

2 ответа

Я понимаю, что это старый вопрос, но он обнаруживается в поиске 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, Легко забыть обновить свое отображение, если вы решите изменить его для своей сущности.

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

Другие вопросы по тегам