In Twig, asset an image which is an attribute of form type

时间:2015-07-28 23:37:29

标签: image forms twig assets assetic

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

1 个答案:

答案 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