以下代码成功地将Mutiple Images上传到Web/Images/Album,但在MySQL中唯一的一张记录是更新的。因此,在显示图像时仅显示一个图像。由于我是Symfony的新手,所以我不知道该怎么做。任何人都可以指导我如何获取图像的所有名称并将其名称插入mysql ??
实体
class album
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="albumName", type="string", length=255)
*/
private $albumName;
/**
* @var string
*
* @ORMColumn(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()
]);
}
这是因为您只有一个称为每张专辑的映像名称的列,而实际上您需要具有多个图像。你必须建立许多关系https://symfony.com/doc/current/doctrine/associations.html
您可以制作一个图像类和专辑类,并将许多图像映射到一个专辑中,然后为每个图像创建多个图像对象,然后将它们设置为所述专辑...
对于您如何定义 Album
实体,它只会期望一个图像而不是很多图像。您应该重新审视您的实体,以使用其中的Album
和许多Image
之间的一对多关联。
use DoctrineCommonCollectionsArrayCollection;
/** @Entity */
class Album
{
// ...
/**
* One Album has Many Images.
* @ORMOneToMany(targetEntity="Image", mappedBy="album")
*/
private $images;
// ...
public function __construct() {
$this->images = new ArrayCollection();
}
}
/** @Entity */
class Image
{
// ...
/**
* Many Images have One Album.
* @ORMManyToOne(targetEntity="Album", inversedBy="images")
* @ORMJoinColumn(name="album_id", referencedColumnName="id")
*/
private $album;
// ...
}
然后,在从表单中处理请求时,您应该将图像添加到阵列汇编中。这样的东西:
$album->getImages->add($image)
当然,您将有很多。
此处和此处查看有关学说协会的更多信息。