Packages
formex
0.6.2
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Form library for Phoenix with Ecto support
Current section
Files
Jump to
Current section
Files
lib/formex/controller.ex
defmodule Formex.Controller do
alias Formex.Form
alias Formex.Builder
defmacro __using__(_) do
quote do
import Formex.Builder
import Formex.Controller
end
end
@moduledoc """
Helpers for controller. Imports `Formex.Builder`. Probably you are looking for
`Formex.Builder.create_form/5`.
# Installation:
`web/web.ex`
```
def controller do
quote do
use Formex.Controller
end
end
```
# Usage
```
def new(conn, _params) do
form = create_form(App.ArticleType, %Article{})
render(conn, "form.html", form: form)
end
```
```
def create(conn, %{"article" => article_params}) do
App.ArticleType
|> create_form(%Article{}, article_params)
|> handle_form
|> case do
{:ok, article} ->
# do something with a new article struct
{:error, form} ->
# display errors
render(conn, "form.html", form: form)
end
end
```
For usage with Ecto see `Formex.Ecto.Controller`
"""
@doc """
Validates form. When is valid, returns `{:ok, form.new_struct}`, otherwise, `{:error, form}` with
validation errors inside `form.errors`
"""
@spec handle_form(Form.t) :: {:ok, Map.t} | {:error, Form.t}
def handle_form(form) do
form = Builder.handle_submit(form)
if form.valid? do
{:ok, form.new_struct}
else
{:error, %{form | submitted?: true}}
end
end
end