مجموعة أزرار الاختيار · النموذج
Phoenix
<.form
for={@form}
action={~p"/radio-group/form"}
method="post"
>
<.radio_group field={@form[:choice]} class="radio-group" items={Corex.List.new([
%{value: "lorem", label: "Lorem ipsum dolor sit amet"},
%{value: "duis", label: "Duis dictum gravida odio ac pharetra?"},
%{value: "donec", label: "Donec condimentum ex mi"}
]
)}>
<:label>Choose one</:label>
<:item_control><.heroicon name="hero-check" class="data-checked" /></:item_control>
<:error :let={msg}>
<.heroicon name="hero-exclamation-circle" class="icon" />
{msg}
</:error>
</.radio_group>
<.action type="submit" class="button button--accent">
Submit
</.action>
</.form>
def radio_group_form_page(conn, _params) do
phoenix_form =
Phoenix.Component.to_form(%{"choice" => ""}, as: :radio_group_phoenix, id: "radio-group-form-phoenix")
render(conn, :radio_group_form_page, phoenix_form: phoenix_form)
end
def radio_group_form_submit(conn, params) do
if is_map(params["radio_group_phoenix"]) do
choice = params["radio_group_phoenix"]["choice"] || ""
conn
|> put_flash(:info, "Submitted: choice=#{inspect(choice)}")
|> redirect(to: ~p"/radio-group/form#radio-group-form-phoenix")
end
end
نموذج Phoenix (changeset)
<.form
for={@form}
action="/account/choice"
method="post"
>
<.radio_group
field={@form[:choice]}
class="radio-group"
items={[
%{value: "lorem", label: "Lorem ipsum dolor sit amet"},
%{value: "duis", label: "Duis dictum gravida odio ac pharetra?"},
%{value: "donec", label: "Donec condimentum ex mi"}
]}
>
<:label>Choose one</:label>
<:item_control><.heroicon name="hero-check" class="data-checked" /></:item_control>
<:error :let={msg}>
<.heroicon name="hero-exclamation-circle" class="icon" />
{msg}
</:error>
</.radio_group>
<.action type="submit" class="button button--accent">
Submit
</.action>
</.form>
def account_choice_strict_page(conn, _params) do
changeset =
MyApp.Forms.RadioChoiceForm.changeset_validate(%MyApp.Forms.RadioChoiceForm{}, %{})
form =
Phoenix.Component.to_form(changeset,
as: :radio_group_validate,
id: "account-choice-validate-form"
)
render(conn, :account_choice_strict, form: form)
end
def account_choice_strict_create(conn, %{"radio_group_validate" => params}) do
case MyApp.Forms.RadioChoiceForm.changeset_validate(%MyApp.Forms.RadioChoiceForm{}, params) do
%Ecto.Changeset{valid?: true} = changeset ->
data = Ecto.Changeset.apply_changes(changeset)
conn
|> put_flash(:info, "Saved: choice=#{data.choice}")
|> redirect(to: "/account")
changeset ->
changeset = Map.put(changeset, :action, :insert)
form =
Phoenix.Component.to_form(changeset,
as: :radio_group_validate,
id: "account-choice-validate-form"
)
render(conn, :account_choice_strict, form: form)
end
end
defmodule MyApp.Forms.RadioChoiceForm do
use Ecto.Schema
import Ecto.Changeset
embedded_schema do
field :choice, :string
end
def changeset(form, attrs \\ %{}) do
form
|> cast(attrs, [:choice])
|> validate_required(:choice)
end
def changeset_validate(form, attrs \\ %{}) do
form
|> cast(attrs, [:choice])
|> validate_required([:choice])
end
end
Native HTML Form
<form action={~p"/radio-group/form"} method="post">
<input type="hidden" name="_csrf_token" value={Plug.CSRFProtection.get_csrf_token()} />
<.radio_group
name="user[choice]"
class="radio-group"
items={[
%{value: "lorem", label: "Lorem ipsum dolor sit amet"},
%{value: "duis", label: "Duis dictum gravida odio ac pharetra?"},
%{value: "donec", label: "Donec condimentum ex mi"}
]
}
>
<:label>Choose one</:label>
<:item_control><.heroicon name="hero-check" class="data-checked" /></:item_control>
</.radio_group>
<.action type="submit" class="button button--accent">Submit</.action>
</form>
def radio_group_form_submit(conn, %{"user" => %{"choice" => choice}}) do
conn
|> put_flash(:info, "Submitted: choice=#{inspect(choice)}")
|> redirect(to: ~p"/radio-group/form#radio-group-form-native")
end