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

Symfony 7资源加载上下文路径错误,带前缀路由下资源404求助

解决Symfony 7 + Velzon UI资源加载路径错误问题

问题根源

你模板里用的是相对路径(比如assets/js/layout.js),当访问/user/list这类子路由时,浏览器会把相对路径解析为当前路由的子路径,也就是/user/assets/...,但实际资源部署在/assets/...(public/assets目录下),所以触发404错误。

解决方案

方案1:使用Twig的asset()函数(推荐)

Symfony自带的asset()函数会自动生成基于public目录的绝对URL,不管当前路由层级,都能正确指向资源:

<!-- Layout config Js -->
<script src="{{ asset('assets/js/layout.js') }}"></script>
<!-- Bootstrap Css -->
<link href="{{ asset('assets/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css" />
<!-- Icons Css -->
<link href="{{ asset('assets/css/icons.min.css') }}" rel="stylesheet" type="text/css" />
<!-- App Css-->
<link href="{{ asset('assets/css/app.min.css') }}" rel="stylesheet" type="text/css" />
<!-- custom Css-->
<link href="{{ asset('assets/css/custom.min.css') }}" rel="stylesheet" type="text/css" />

方案2:用Webpack Encore的entrypoint标签(更规范)

你已经在webpack.config.js里定义了资源入口,直接用Encore提供的Twig函数加载资源,还能自动处理版本缓存、路径:

{# 加载所有CSS入口 #}
{{ encore_entry_link_tags('bootstrap', 'icons', 'app', 'custom') }}
{# 加载JS资源,若layout.js已合并到entry里,直接引用对应entry即可 #}
<script src="{{ asset('assets/js/layout.js') }}"></script>

方案3:手动改为绝对路径

如果不想用Twig函数,直接给路径加前缀斜杠,强制浏览器从根目录加载:

<!-- Layout config Js -->
<script src="/assets/js/layout.js"></script>
<!-- Bootstrap Css -->
<link href="/assets/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<!-- 其他资源同理 -->

注意:这种方式在部署到子目录的环境中需要手动调整路径,灵活性较差。

额外检查

你的webpack.config.js配置是正确的:setPublicPath('/assets')和setOutputPath('public/assets/')已经正确指定了资源的输出位置和访问路径,无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:06:03