在3.4 symfony项目中,我有一个Annonce
实体,其中包含一个photos
字段:
/**
* @ORM\OneToOne(targetEntity="AnnoncesBundle\Entity\Photo")
* @ORM\JoinColumn(name="photos_id", referencedColumnName="id")
*
* @Assert\Valid
*/
private $photos;
在AnnonceType中,我有这个:
->add('photos', AjaxfileType::class, array('multiple' => true, 'dropZone' => true, 'block_name' => ""))
AjaxFileType
有两个字段:
$builder->add("bnbc_ajax_file_photos", FileType::class, array("multiple" => true, "mapped" => false))
->add("photos", HiddenType::class, array("constraints" => [new ImageNumberConstraint()]));
并且我已经将AjaxFileType配置为与Photo
实体进行映射:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AnnoncesBundle\Entity\Photo',
....
这是我的Photo
实体:
<?php
namespace AnnoncesBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
/**
* Photo
*
* @ORM\Table(name="photo")
* @ORM\Entity(repositoryClass="AnnoncesBundle\Repository\PhotoRepository")
*/
class Photo
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @ORM\Column(name="photos", type="text")
*/
private $photos;
/**
* @return string
*/
public function getPhotos()
{
return $this->photos;
}
/**
* @param string $photosPaths
*/
public function setPhotos($photosPaths)
{
$this->photos = $photosPaths;
}
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context, $payload)
{
$this->photos;
}
}
文件类型未映射,因为我只是想获取文件名(上传已经由ajax完成)。
在我的表单中,确实有一个名为photos
的字段,其中包含数据,但是当我提交表单时,photos
实体中没有填写字段Annonce
(如果我在控制器中执行$request->get("photos")
,我就得到了很好的数据)
此外,未调用我的validate
函数。
我想要的是能够验证我的照片字段。
有什么不好的主意吗?
谢谢大家!