Symfony 3:上传时调整图像大小

时间:2017-02-25 15:15:31

标签: php symfony image-uploading

我需要在上传时调整图片大小,并且无法真正找到解决方法。 我没有使用任何捆绑包,我遵循了symfony文档中的UploadFile示例。

这是有效的,复制右侧文件夹中的图像但我需要以某种方式调整它的大小。 如果可能的话,我需要一些方法来做它而不添加包。

这是服务(就像在文档中一样):

class ImgUpload
{
    private $targetDir;

    public function __construct($targetDir)
    {
        $this->targetDir = $targetDir;
    }

    public function upload(UploadedFile $file)
    {
        $file_name = $file->getClientOriginalName();

        empty($file_name) ? $file_name = md5(uniqid()).'.'.$file->guessExtension() : $file_name = $file->getClientOriginalName();

        $file->move($this->targetDir, $file_name);

        return $file_name;
    }
}

这是在我的控制器中:

/**
 * @Route("admin/import_images", name="import_images")
 */
public function importImgAction(Request $request)
{
    $form = $this->createForm(ImportImgType::class, NULL);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $paths = $form->get('path')->getData();

        foreach($paths as $path) {
            $this->get('app.img_upload')->upload($path);

        }

        return $this->redirect($this->generateUrl('product_list'));
    }

    return $this->render('AppBundle:productmanager:import_images.html.twig', array(
        'form' => $form->createView(),
    ));
}

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我使用实体监听器来监听您使用ImportImgType更新的实体的持久性和更新,如果有新图像,则调整大小。

app.entity_listener.resize_img:
  class: AppBundle\ResizeImgListener
  tags:
    - { name: doctrine.orm.entity_listener, entity: AppBundle\Entity\ImportImg, event: postUpdate }
    - { name: doctrine.orm.entity_listener, entity: AppBundle\Entity\ImportImg, event: postPersist }

有关实体侦听器的更多详细信息:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#entity-listeners-class