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

《Programming Phoenix》:‘assigns’关键字映射的来源是什么?

关于Phoenix中assigns来源的详解

嘿,这个问题问得特别到位!我当初啃《Programming Phoenix》的时候也纠结过这个assigns的来龙去脉,现在给你掰扯清楚:

  • 控制器是变量的起点:当你在Phoenix控制器的动作里写类似render(conn, "index.html", products: products, category: category)的代码时,最后那个键值对列表(products: products, category: category)就是在往assigns里塞变量。Phoenix会自动把这些变量整合到conn结构体的assigns字段中。

  • 自动传递到布局模板:控制器处理完请求后,Phoenix会把conn.assigns里的所有变量,加上它自己注入的@view_module(对应要渲染的视图模块,比如MyApp.ProductView)和@view_template(对应具体模板文件名,比如"index.html"),一起传递给布局模板app.html.eex。这时候布局模板里的assigns就包含了所有这些数据。

  • 完整传递给子模板:app.html.eex里的<%= render @view_module, @view_template, assigns %>这句,就是把布局模板的assigns完整传递给具体的页面子模板。这样子模板里就能直接通过@products、@category这种形式访问到控制器传过来的变量了。

  • 额外变量也会被包含:如果你在布局模板里手动添加变量(比如<%= assign(conn, :page_title, "商品列表") %>),这些变量也会被加入到assigns中,同样能被子模板访问到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:02:41