在 Twig 中,资产是一个图像,它是表单类型的一个属性

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

我试过了,没用

<img id="previewHolder" width="100%" height="100%" src="{{ asset('bundles/hearwegohearwego/uploads/articleimg/'~form.img.vars.value)}}"/>

img是reusable form类型的一个属性form,图片存放在数据库中的路径

简答

如果您想使用 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 15=]函数.

在 Twig 中:

{% set imagePath = 'bundles/hearwegohearwego/uploads/articleimg/' ~ imageFile %}
<img id="previewHolder" width="100%" height="100%" src="{{ asset( imagePath ) }}"/>

说明

您的图片具有 id="previewHolder" 属性,这表明您正在以动态方式将此图片用作临时占位符,然后上传用户选择的图片,然后在该图片中显示 -可能在 POST-ing 表单(包括该图像)到您的网站之前。 Twig 无法在服务器端为您解析该图像,因此必须使用 JavaScript 来渲染该图像。

在 Twig 中,您希望使用的任何变量都必须由您的控制器传递给 Twig;例如:

echo $template->render(array('the' => 'variables', 'go' => 'here'));

在你的问题中,有一个 constant 与一个 variable 连接在一起。 这个变量叫做 form.img.vars.value 而不是被 Twig 识别为传递给 Twig::render(...) 函数的值之一。它似乎是 JavaScript,它不会 运行(在客户端),直到 Twig 操作已经被执行(在服务器端)。

如果我的推测是正确的,并且您想在上传过程中预览图片,请参阅问题:Preview an image before it is uploaded