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

Elixir Phoenix 1.7.2:HEEx语法下登录表单如何使用for和as?

解决方案

对应旧EEX代码的HEEx实现

<h1>Sign in</h1>
<.simple_form :let={f} for={:%{}} as: :session action={~p"/login"}>
  <.input field={f[:username]} type="text" label="Username" placeholder="username" />
  <.input field={f[:password]} type="password" label="Password" placeholder="password" />
  <:actions>
    <.button>Sign In</.button>
  </:actions>
</.simple_form>

关键参数说明

  • for={:%{}}:替代旧代码中的@conn,表示这是一个不绑定任何Ecto模型的表单,和原表单的无模型提交逻辑完全一致。
  • as: :session:直接在<.simple_form>标签上添加该选项,对应旧代码里的[as: :session]。提交表单后,前端参数会被自动嵌套在params["session"]下,比如你可以在控制器中通过params["session"]["username"]获取用户名,和旧代码的参数结构完全匹配。
  • 字段修正:把你原来写的f[:name]改为f[:username],和旧代码的:username字段名保持一致,确保参数传递正确。
  • 占位符:添加了和旧代码一致的placeholder属性,保持UI体验不变。

额外注意

确保你的路由配置中,~p"/login"指向的是会话创建的动作(对应旧代码的session_path(@conn, :create)),比如在router.ex中应该有类似这样的配置:

post "/login", SessionController, :create
get "/login", SessionController, :new

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:37:27