craftcms / cms

Build bespoke content experiences with Craft.
https://craftcms.com
Other
3.22k stars 627 forks source link

[4.4.0-beta.2]: svg(asset) returns empty string #12733

Closed wsydney76 closed 1 year ago

wsydney76 commented 1 year ago

What happened?

Description

Using the svg function with an svg icon returns an empty string.

2023-02-24 10:29:00 [web.ERROR] [craft\helpers\Html::svg] Could not get the contents of CloudArrowUp.svg: Call to a member function getFileStream() on null {"memory":1609400} 
2023-02-24 10:29:00 [web.ERROR] [Error] Error: Call to a member function getFileStream() on null in /var/www/html/vendor/craftcms/cms/src/elements/Asset.php:2240
Stack trace:
#0 /var/www/html/vendor/craftcms/cms/src/elements/Asset.php(2253): craft\elements\Asset->getStream()
#1 /var/www/html/vendor/craftcms/cms/src/helpers/Html.php(1021): craft\elements\Asset->getContents()
#2 /var/www/html/vendor/craftcms/cms/src/web/twig/Extension.php(1495): craft\helpers\Html::svg(Object(craft\elements\Asset), NULL, NULL)
#3 /var/www/html/storage/runtime/compiled_templates/00/00dfac5f0992c25f351d43da2dcbe44e.php(44): craft\web\twig\Extension->svgFunction(Object(craft\elements\Asset))
#4 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_d3010962a4e07244266292a53be2d611->doDisplay(Array, Array)
#5 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#6 /var/www/html/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#7 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
#8 /var/www/html/vendor/twig/twig/src/Environment.php(277): Twig\TemplateWrapper->render(Array)
#9 /var/www/html/vendor/craftcms/cms/src/web/View.php(446): Twig\Environment->render('test/svg', Array)
#10 /var/www/html/vendor/craftcms/cms/src/web/View.php(499): craft\web\View->renderTemplate('test/svg', Array)
#11 /var/www/html/vendor/craftcms/cms/src/web/TemplateResponseFormatter.php(56): craft\web\View->renderPageTemplate('test/svg', Array, 'site')
#12 /var/www/html/vendor/yiisoft/yii2/web/Response.php(1098): craft\web\TemplateResponseFormatter->format(Object(craft\web\Response))
#13 /var/www/html/vendor/craftcms/cms/src/web/Response.php(286): yii\web\Response->prepare()
#14 /var/www/html/vendor/yiisoft/yii2/web/Response.php(339): craft\web\Response->prepare()
#15 /var/www/html/vendor/yiisoft/yii2/base/Application.php(390): yii\web\Response->send()
#16 /var/www/html/web/index.php(12): yii\base\Application->run()
#17 {main} {"memory":1609776,"exception":"[object] (Error(code: 0): Call to a member function getFileStream() on null at /var/www/html/vendor/craftcms/cms/src/elements/Asset.php:2240)"} 

Steps to reproduce

  1. Upload a svg file
  2. Run this template:
{% set icon = craft.assets.filename('CloudArrowUp.svg').one %}
{% if icon %}
    {% dd svg(icon) %}
{% endif %}

image

Fun fact and workaround for now:

If you call the url method before the svg function, it works:

{% set icon = craft.assets.filename('CloudArrowUp.svg').one %}
{% if icon %}
    {% do icon.url %}
    {% dd svg(icon) %}
{% endif %}

image

Expected behavior

Svg content is output

Actual behavior

An empty string is return, an error is logged

Craft CMS version

4.4.0-beta.2

PHP version

8.1.13

Operating system and version

Linux 5.15.79.1-microsoft-standard-WSL2

Database type and version

MySQL 5.7.14

Image driver and version

Imagick 3.7.0 (ImageMagick 6.9.11-60)

Installed plugins and versions

-

i-just commented 1 year ago

Hi, thanks for reporting! A PR to fix this has been created.

brandonkelly commented 1 year ago

Fixed for the next release via #12736.

brandonkelly commented 1 year ago

4.4.0-beta.3 is out with that fix.