我有一个控制器,其中包含一个
我可以向数据库添加图片并从中删除它们。
当我遵循Symfony文档创建上传文件时,我也在我的
这是我上传文件的路由。
我的问题是,当我使用删除操作将图片从数据库中删除时,它可以正常完成。但是在
我也尝试使用
这是我的控制器:
createAction
、editAction
和deleteAction
。我可以向数据库添加图片并从中删除它们。
当我遵循Symfony文档创建上传文件时,我也在我的
config.yml
中创建了这个路由。parameters:
uploaded_restaurants: "%kernel.root_dir%/../web/uploads/restaurants"
这是我上传文件的路由。
我的问题是,当我使用删除操作将图片从数据库中删除时,它可以正常完成。但是在
/web/uploads/restaurants
文件夹中并没有删除它们。 我试图找到一种方法能够同时在文件夹中删除它们,但是没有成功。我也尝试使用
Filesystem()
来删除它们,但我可能写错了代码。这是我的控制器:
class MediaController extends Controller
{
/**
* @param Request $request
* @param Restaurant $restaurant
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function newAction(Request $request, Restaurant $restaurant)
{
$media = new Media();
$form = $this->createForm(MediaType\CreateType::class, $media);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$mediaList = $this->getDoctrine()->getRepository('AppBundle:Media')->findImageByRestaurantType($restaurant, $form->get('context')->getData());
if ($mediaList == null || count($mediaList) < 1) {
$media->setType('img')
->setContext($form->get('context')->getData())
;
} else {
$media = $mediaList;
}
$imageFile = $request->files->get('create')['name'];
$targetDir = $this->getParameter('uploaded_restaurants');
$imageName = $this->get('app.uploader')->upload($imageFile, $targetDir);
/** @var $originalName */
$originalName = $imageFile->getClientOriginalName();
$media->setName($imageName)
->setOriginalName($originalName)
->setCreatedAt(new \DateTime());
$em = $this->getDoctrine()->getManager();
$media->setRestaurant($restaurant);
$em->persist($media);
$em->flush();
return $this->redirectToRoute('admin_restaurant_show_fr', array('id' => $restaurant->getId()));
}
return $this->render('admin/restaurant/media/new.html.twig', array(
'restaurant' => $restaurant,
'form' => $form->createView()
));
}
/**
* @param Request $request
* @param Media $media
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function editAction(Request $request, Media $media)
{
$em = $this->getDoctrine()->getManager();
$editForm = $this->createForm(MediaType\EditType::class, $media);
$editForm->handleRequest($request);
$restaurant = $media->getRestaurant();
if ($editForm->isSubmitted() && $editForm->isValid()) {
$imageFile = $request->files->get('edit')['name'];
$targetDir = $this->getParameter('uploaded_restaurants');
$imageName = $this->get('app.uploader')->upload($imageFile, $targetDir);
if ($request->files->get('edit')['name'] != null) {
$fs = new Filesystem();
try {
$fs->remove($this->get('kernel')->getRootDir() . '/../web/uploads/restaurants' . $media->getName());
} catch (IOException $e) {
echo "error";
}
/** @var $originalName */
$originalName = $imageFile->getClientOriginalName();
$media->setName($imageName)
->setOriginalName($originalName)
->setUpdatedAt(new \DateTime());
}
$em->persist($media);
$em->flush();
return $this->redirectToRoute('admin_restaurant_show_fr', array('id' => $restaurant->getId()));
}
return $this->render('admin/restaurant/media/edit.html.twig', array(
'media' => $media,
'restaurant' => $restaurant,
'editForm' => $editForm->createView()
));
}
/**
* @param Media $media
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
public function deleteAction(Media $media)
{
$restaurant = $media->getRestaurant();
$em = $this->getDoctrine()->getManager();
$em->remove($media);
$em->flush();
return $this->redirectToRoute('admin_restaurant_show_fr', array('id' => $restaurant->getId()));
}
}
正如您在editAction中看到的,我试图添加一个Filesystem
以便删除文件。
我的问题
我应该怎样在我的editAction
和deleteAction
中操作,以便从目录中正确删除我的文件?
如果您不是很理解我的代码,您能否给我展示一个有效的例子?
谢谢