I've tried this in vain
<img id="previewHolder" width="100%" height="100%" src="{{ asset('bundles/hearwegohearwego/uploads/articleimg/'~form.img.vars.value)}}"/>
img
is an attribute of reusable form type form
, path of the image stored in database
答案 0 :(得分:1)
如果要使用Twig::asset(...)
函数渲染图像,(1)图像必须已存在于服务器上,(2)您必须传递asset(...)
相对路径名,以导致该图像位置。
在你的控制器中:
$templateValues['imageFile'] = $name_of_uploaded_file;
$template = $twig->loadTemplate('index.html');
echo $template->render( $templateValues );
您的Twig实施可能会有所不同;例如,使用Symfony2,Silex等。重要的是使用您的控制器或PHP代码来确定图像的文件名,并将该字符串作为传递给Twig::render(...)
函数的普通关联数组的一部分提供给Twig 的
在Twig中:
{% set imagePath = 'bundles/hearwegohearwego/uploads/articleimg/' ~ imageFile %}
<img id="previewHolder" width="100%" height="100%" src="{{ asset( imagePath ) }}"/>
您的图片具有id="previewHolder"
属性,表示您正在以动态方式将此图像用作临时占位符,然后上传用户选择的图像,然后在该图像中显示 - 可能在之前将表单(包括该图像)发布到您的网站。 Twig无法在服务器端为您解析该图像,因此必须使用JavaScript来呈现该图像。
在Twig中,您希望使用的任何变量必须由您的控制器传递给Twig;例如:
echo $template->render(array('the' => 'variables', 'go' => 'here'));
在你的问题中,有一个常量与变量连接。该变量被称为form.img.vars.value
,Twig无法将其识别为其中一个值传递给Twig::render(...)
函数。它似乎是JavaScript,直到已经采取Twig操作(在服务器端)才会运行(在客户端)。
如果我的推测是正确的,并且您想在上传过程中预览图片,请参阅问题:Preview an image before it is uploaded。