【发布时间】:2018-07-25 03:47:20
【问题描述】:
所以,我目前正在进行一个使用 symfony 学习 Object PHP 的教育项目。而且,我一直坚持将文件上传到数据库......
这里是实体:
<?php
namespace MediaBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Media
*
* @ORM\Table(name="media", indexes={@ORM\Index(name="k_genre", columns={"genre"}), @ORM\Index(name="k_createur", columns={"createur"})})
* @ORM\Entity(repositoryClass="MediaBundle\Repository\MediaRepository")
*/
class Media
{
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, nullable=false)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="extension", type="string", length=3, nullable=false)
*/
private $extension;
/**
* @var string
*
* @ORM\Column(name="link", type="text", nullable=true)
*/
private $link;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
private $genre;
/**
* @var \MediaBundle\Entity\Personne
*
* @ORM\ManyToOne(targetEntity="MediaBundle\Entity\Personne")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="createur", referencedColumnName="id")
* })
*/
private $createur;
/**
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @param string $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return string
*/
public function getExtension()
{
return $this->extension;
}
/**
* @param string $extension
*/
public function setExtension($extension)
{
$this->extension = $extension;
}
/**
* @return string
*/
public function getLink()
{
return $this->link;
}
/**
* @param string $link
*/
public function setLink($link)
{
$this->link = $link;
}
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @param int $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return Genre
*/
public function getGenre()
{
return $this->genre;
}
/**
* @param Genre $genre
*/
public function setGenre($genre)
{
$this->genre = $genre;
}
/**
* @return Personne
*/
public function getCreateur()
{
return $this->createur;
}
/**
* @param Personne $createur
*/
public function setCreateur($createur)
{
$this->createur = $createur;
}
}
这是表格:
<?php
namespace MediaBundle\Form;
use MediaBundle\Entity\Genre;
use MediaBundle\Entity\Personne;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class MediaType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$uploadRequired = false;
$builder->add('name', TextType::class, array('attr' =>
array(
'class' => "form-control col-8")))
->add('extension', TextType::class, array('attr' =>
array(
'class' => "form-control col-8")))
->add('link', FileType::class, array('attr' =>
array(
'class' => "form-control col-8",
)))
->add('uploadPreview', FileType::class, array(
'mapped' => false,
'required' => $uploadRequired,
'attr' => array(
'class' => 'form-control col-8',
'placeholder' => 'Aperçu du médium'
)))
->add('genre', EntityType::class, array(
'class' => Genre::class,
'attr' => array('class' => "form-control col-8")))
->add('createur', EntityType::class, array(
'class' => Personne::class,
'attr' => array('class' => "form-control col-8")));
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MediaBundle\Entity\Media'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'mediabundle_media';
}
}
还有控制器:
<?php
namespace MediaBundle\Controller;
use MediaBundle\Entity\Media;
use MediaBundle\Form\MediaType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;use Symfony\Component\HttpFoundation\Request;
class MediaController extends Controller
{
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$media = $em->getRepository('MediaBundle:Media')->findAll();
return $this->render('@Media/admin/media/index.html.twig', array(
'media' => $media,
));
}
public function newAction(Request $request)
{
$medium = new Media();
$form = $this->createForm(MediaType::class, $medium);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($medium);
$em->flush();
return $this->redirectToRoute('media_show', array('id' => $medium->getId()));
}
return $this->render('@Media/admin/media/new.html.twig', array(
'medium' => $medium,
'form' => $form->createView(),
));
}
public function showAction(Media $medium)
{
$deleteForm = $this->createDeleteForm($medium);
return $this->render('@Media/admin/media/show.html.twig', array(
'medium' => $medium,
'delete_form' => $deleteForm->createView(),
));
}
public function editAction(Request $request, Media $medium)
{
$deleteForm = $this->createDeleteForm($medium);
$editForm = $this->createForm(MediaType::class, $medium);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('media_edit', array('id' => $medium->getId()));
}
return $this->render('@Media/admin/media/edit.html.twig', array(
'medium' => $medium,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
public function deleteAction(Request $request, Media $medium)
{
$form = $this->createDeleteForm($medium);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->remove($medium);
$em->flush();
}
return $this->redirectToRoute('media_index');
}
private function createDeleteForm(Media $medium)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('media_delete', array('id' => $medium->getId())))
->setMethod('DELETE')
->getForm()
;
}
}
我必须将 2 个资产(例如图像 + 媒体文件)放在我的数据库中的同一字段中。我没有更改数据库的权利。所以,这对我来说有点复杂。
这是完整的状态:
编辑媒体实体表单,以便您可以添加 2 个文件。 媒体缩略图文件 媒体文件(音频或视频) 更改不得修改数据库 扩展字段用于存储音频或视频文件的扩展名 音频和视频中可能的扩展名(mp3,wav,ogg,mp4,ogv,...)必须存储在参数(yml)中
【问题讨论】: