以下代码成功将多个图像上传到web / images / album,但只有一个记录在mysql中更新。 因此,在显示图像时,仅显示一个图像。 由于我是symfony的新手,我不知道该怎么做。 任何人都可以指导我如何获取图像的所有名称并在mysql中插入其名称吗?
实体
class album
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="albumName", type="string", length=255)
*/
private $albumName;
/**
* @var string
*
* @ORM\Column(name="imageName", type="string", length=255)
*/
private $imageName;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set albumName
*
* @param string $albumName
*
* @return album
*/
public function setAlbumName($albumName)
{
$this->albumName = $albumName;
return $this;
}
/**
* Get albumName
*
* @return string
*/
public function getAlbumName()
{
return $this->albumName;
}
/**
* Set imageName
*
* @param string $imageName
*
* @return album
*/
public function setImageName($imageName)
{
$this->imageName = $imageName;
return $this;
}
/**
* Get imageName
*
* @return string
*/
public function getImageName()
{
return $this->imageName;
}
}
表格
$builder->add('albumName', TextType::class)
->add('imageName', FileType::class, array(
'multiple' => true,
'data_class' => null
))
->add('save', SubmitType::class, array('label' => 'Submit', 'attr' => array('class' => 'btn btn-primary')));
控制器
public function indexAction(Request $request) {
$albumMember = new album();
$galleryView = $this->createForm(imageUpload::class, $albumMember);
$galleryView->handleRequest($request);
if ($galleryView->isSubmitted() && $galleryView->isValid()) {
/**
* @var UploadedFile $file
*/
$file = $albumMember->getImageName();
foreach ($file as $count) {
$fileName = md5(uniqid()) . '.' . $count->guessExtension();
$count->move(
$this->getParameter('image_directory'), $fileName
);
$albumMember->setImageName($fileName);
$albumName = $galleryView['albumName']->getData();
$albumMember->setAlbumName($albumName);
}
$em = $this->getDoctrine()->getManager();
$em->persist($albumMember);
$em->flush();
$this->addFlash('notice', 'Images Added');
return $this->redirectToRoute('createGallery');
}
return $this->render('admin/galleryView.html.twig', [
'galleryView' => $galleryView->createView()
]);
}
答案 0 :(得分:0)
这是因为每个专辑只有一列名为图像名称,实际上你需要有多个图像。你必须建立一个多关系 https://symfony.com/doc/current/doctrine/associations.html
制作图像类和相册类,将许多图像映射到一个相册,然后为每个图像创建多个图像对象并将它们设置为所述相册...
答案 1 :(得分:0)
对于您如何定义Album
实体,它只期望一个图像,而不是很多图像。您应该重新访问您的实体,以便在其中使用Album
和许多Image
之间的一对多关联。
use Doctrine\Common\Collections\ArrayCollection;
/** @Entity */
class Album
{
// ...
/**
* One Album has Many Images.
* @ORM\OneToMany(targetEntity="Image", mappedBy="album")
*/
private $images;
// ...
public function __construct() {
$this->images = new ArrayCollection();
}
}
/** @Entity */
class Image
{
// ...
/**
* Many Images have One Album.
* @ORM\ManyToOne(targetEntity="Album", inversedBy="images")
* @ORM\JoinColumn(name="album_id", referencedColumnName="id")
*/
private $album;
// ...
}
然后,当从表单处理请求时,您应该将图像添加到ArrayCollection。像这样:
$album->getImages->add($image)
当然,你会有吸气剂/安装者。