2

我在编辑配置文件树枝模板上添加了一个 VichImageType 字段......所以我尝试使用 vich_uploader.pre_upload 作为事件检查图像尺寸。

在我的课堂上,我得到了图像属性,如果它们的尺寸不够大,我试图停止传播并向树枝模板闪现一条消息,但是我不知道为什么,事件不断传播并重定向到 fos_user_profile_show 显示图像设置。另外,我尝试再次重定向到 fos_user_profile_edit,但我不能使用 $event,因为“Vich\UploaderBundle\Event\Event”没有实现 setController()。怎样才能做到这一点?

这是Listener类的方法:

namespace BackendBundle\EventListener;

use Vich\UploaderBundle\Event\Event;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\RouterInterface;

class ComprobarDimensionesDeImagen
{

private $requestStack;
private $router;

public function __construct(RequestStack $requestStack, RouterInterface $router)
{
    $this->requestStack = $requestStack;
    $this->router = $router;
}

public function onVichUploaderPreUpload(Event $event)
{
    $object = $event->getObject();
    $mapping = $event->getMapping();

    $imagen = getimagesize($object->getImageFile());

    if (250 > $imagen[0] || 250 > imagen[1]) {
        $request = $this->requestStack->getCurrentRequest();
        $session = $request->getSession();

        $event->stopPropagation();
        $session->getFlashBag()->add('error', "Minimum dimensions: 250x250 \n");

        $url = $this->router->generate('fos_user_profile_edit');
        /*
         * Testing different methods of redirect
         * 
         * $response = new RedirectResponse($url);
         * $event->setResponse($response);
         */

        $event->setController(function() use ($request) {
            return new RedirectResponse($url);
        });            
    }
}
}

当我再次编辑配置文件时,我可以在 VichImageType 字段中看到 flash 消息和图像设置(我没想到会停止传播)。任何帮助都将受到欢迎。

已解决:仅在我的 Entity 类中使​​用 @Assert\Image 进行了验证。不需要服务也不需要监听器

4

1 回答 1

1

->setController 的参数必须是可调用的。在您的情况下,您作为参数传递的函数返回响应类型的对象。为了可调用,该方法应具有后缀Action. 另见这篇文章

于 2017-08-11T00:56:15.500 回答