AshPhoenix 用于把 Ash Framework 与 Phoenix 集成,核心是 AshPhoenix.Form,可为 Ash 资源生成表单。
用途:在 Phoenix 中创建和更新由 Ash 资源支撑的表单,并处理验证、提交、嵌套关系与联合类型输入。
主要能力:
- 创建表单:AshPhoenix.Form.for_create(MyApp.Blog.Post, :create) |> to_form();更新用 for_update(post, :update);可通过 params 传入初始值。
- 代码接口表单:在 domain 中 use Ash.Domain, extensions: [AshPhoenix],并在 resources 里用 define 定义动作,生成 form_to_* 函数。
- 位置参数:默认 define 的 args 在表单中被忽略,可在 forms 块中配置 form :register_with_password, args: [:email],用于不应在表单中编辑的值(如 user_id)。
- 验证与提交:用 AshPhoenix.Form.validate 处理 validate 事件;用 AshPhoenix.Form.submit 处理 submit,成功返回 {:ok, post},失败返回 {:error, form}。
- 嵌套表单:动作含 manage_relationship 时自动推断嵌套表单,配合 <.inputs_for> 渲染;用 AshPhoenix.Form.add_form 和 remove_form 增删嵌套项。
- 联合表单:对 union 类型按 _union_type 切换不同输入,切换时先 remove_form 再 add_form。
- 错误调试:AshPhoenix.Form.raw_errors(form, for_path: :all) 查看全部错误;AshPhoenix.Form.errors(form, for_path: :all) 查看会显示的错误。错误需实现 AshPhoenix.FormData.Error 协议并设置 field/fields 才会显示。
使用方式:在 Phoenix LiveView 中把表单赋给 socket,处理 validate 与 submit 事件;嵌套与联合表单通过路径操作表单结构。
适用场景:使用 Ash 资源构建 Phoenix 表单、处理关联数据与多类型输入。
限制:资料未提供安装步骤、版本要求、收费与平台信息;错误显示依赖协议实现,未绑定字段的动作错误需用 flash 或提示展示。建议先加载所需关系再创建更新表单。