Vich UploadedFile,FOSUserBundle和Events

时间:2017-08-10 21:45:43

标签: symfony fosuserbundle symfony-2.8 vichuploaderbundle

我在编辑配置文件树枝模板上添加了一个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进行了验证。没有听众需要的服务

1 个答案:

答案 0 :(得分:1)

- > setController的参数必须是callable。在您的情况下,作为参数传递的函数返回Response类型的对象。为了可调用,该方法应具有后缀Action。另请参阅this post