$builder->add('image', new FileType(), array('label' => 'Логотип'));
$builder->add('file', 'file', array('label' => false));
Catchable Fatal Error: Argument 1 passed to Proxies\__CG__\AppBundle\Entity\File::setFile() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, null given, called in
но из-за того что это поле обязательное, при попытке сохранить без фотки он мне кидает исключение
/**
* @var \AppBundle\Entity\File
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\File", cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="image", referencedColumnName="id")
* })
*/
private $image;
@ORM\JoinColumn(name="image", referencedColumnName="id", nullable=false)
/** * @var \AppBundle\Entity\File * * @ORM\ManyToOne(targetEntity="AppBundle\Entity\File", cascade={"persist"}) * @ORM\JoinColumns({ * @ORM\JoinColumn(name="image", referencedColumnName="id") * }) */ private $image;
/**
* @var \AppBundle\Entity\File
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\File", cascade={"persist"})
* @ORM\JoinColumn(name="image", nullable=true, options={"default" = null})
*/
private $image;
Только вот FK не дает обновить БД
php app\console doctrine:schema:update --force
[Doctrine\DBAL\Exception\DriverException]
An exception occurred while executing 'ALTER TABLE companies CHANGE image i
mage BIGINT NOT NULL':
SQLSTATE[HY000]: General error: 1832 Cannot change column 'image': used in
a foreign key constraint 'FK_8244AA3AC53D045F'
[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[HY000]: General error: 1832 Cannot change column 'image': used in
a foreign key constraint 'FK_8244AA3AC53D045F'
[PDOException]
SQLSTATE[HY000]: General error: 1832 Cannot change column 'image': used in
a foreign key constraint 'FK_8244AA3AC53D045F'
2. Не надо перзистить ту сущность, которую получили из формы. Просто получите из неё фотографию и обновите ту сущность, которую получили из БД.
$builder->add('file', 'file', array('label' => false));
Зачем же вы тогда делали поле nullable
нужно описать логику обновления данных сущности из формы
для теста
как же я опишу, если ошибка возникает на этапе handleRequest?
Catchable Fatal Error: Argument 1 passed to Proxies\__CG__\AppBundle\Entity\File::setFile() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, null given, called in
Какой смысл тестировать то, что вам не нужно?
объявите поле формы как необязательное с помощью опции required.
https://gist.github.com/antonowano/314a2998e30183609a67
$form = $this->createForm(new AddCompanyType($em));
// ...
$builder->get('user')->addModelTransformer(new EntityToNumberTransformer($this->manager, 'AppBundle:Users'));
class Companies
Companies
называется, если он представляет одну компанию? Аналогично с Files
и т.п./**
* @ORM\Column(name="address", type="json_array", length=65535, nullable=true)
*/
private $address;
// ...
/**
* @var string
*
* @ORM\Column(name="functions", type="json_array", length=65535, nullable=true)
*/
private $functions;
class EditCompanyType extends AddCompanyType
2. Не надо перзистить ту сущность, которую получили из формы. Просто получите из неё фотографию и обновите ту сущность, которую получили из БД.
не понял.
public function editCompanyAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('AppBundle:Companies')->find($id);
null
вернулся.if ($form->isSubmitted() && $form->isValid()) {
$entity = $form->getData();
file
и, если таки этот файл есть - привязывать его к первой $entity
.The form's view data is expected to be an instance of class Symfony\Component\HttpFoundation\File\File, but is a(n) string. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms a(n) string to an instance of Symfony\Component\HttpFoundation\File\File
$builder->add('file', 'file', array(
'label' => false,
'data_class' => null // <-- here
));
Catchable Fatal Error: Argument 1 passed to Proxies\__CG__\AppBundle\Entity\Files::setFile() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, null given, called in D:\xampp\htdocs\52realty.local\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php on line 410 and defined