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