You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony调用数据库存储资源时asset()函数报错解决

问题根因

这个报错和你写的视频路径没有关系,是项目静态资源配置默认开启了Webpack Encore/Asset Mapper的manifest映射模式:开启后asset()函数会强制读取public/build/manifest.json做资源路径映射,你没有执行前端构建生成这个文件,不管传入什么路径都会直接抛出这个异常。

解决方案

根据你项目的实际使用场景二选一即可:

  • 如果你项目本身没有用Webpack Encore或者Asset Mapper管理前端编译资源
    直接关闭manifest读取逻辑即可:

    1. 打开项目根目录下的config/packages/framework.yaml配置文件
    2. 找到assets配置段,删除或注释掉json_manifest_path配置项,修改后的参考配置如下:
    framework:
        assets:
            # 注释/删除下面这行,就不会强制查找manifest文件
            # json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
    
    1. 执行命令清除项目缓存:
    php bin/console cache:clear
    

    操作完成后你原来写的{{ asset(commande.lienVideo)}}就可以正常生成资源路径了,你数据库里存的相对路径不要带开头斜杠,asset函数会自动补全站点根路径,对应你存的Commande/test/a/2362022a.mp4,最终渲染出来的访问路径是/Commande/test/a/2362022a.mp4,和你public目录下的实际存放位置完全匹配。

  • 如果你项目本身就是用Webpack Encore管理前端资源
    只需要在项目根目录执行一次前端构建命令,生成缺失的manifest文件即可:

    # 依赖用npm管理的话执行
    npm run build
    
    # 依赖用yarn管理的话执行
    yarn build
    

    构建完成后public/build/目录下会自动生成manifest.json,asset()函数就可以正常运行。注意你自己存的视频这类静态文件不要放到public/build目录下,就按你现在的目录结构放在public下的自定义目录即可,asset()函数识别到不在manifest映射列表里的路径,会直接按原路径生成访问地址,不会出现报错。

额外提醒

你写的video标签里type属性填的是video/webm,但实际文件是mp4格式,记得改成video/mp4,否则部分浏览器会因为格式识别失败无法播放视频,正确的标签写法参考:

<video controls>
    <source src="{{ asset(commande.lienVideo)}}" type="video/mp4">
</video>

内容的提问来源于stack exchange,提问作者Eileen Balaguer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:45:49