Understanding Forms and Changesets: Difference between revisions
No edit summary |
No edit summary |
||
| Line 51: | Line 51: | ||
end | end | ||
end | end | ||
</source> | |||
In the controllers directory create a file named page_html.ex | |||
In this file, copy this code. | |||
<source> | |||
defmodule AppWeb.PageHTML do | |||
use AppWeb, :html | |||
embed_templates "page_html/*" | |||
end | |||
</source> | |||
In the controllers directory create another directory named '''page_html''' (technically you can place this directory outside the controllers and it will still work). | |||
app/lib/app_web/controllers | |||
This directory will contain heex templates for the PageController. | |||
In the page_html directory place a file named '''index.html.heex'''. | |||
Inside the file copy the following code. | |||
<source> | |||
<form method="POST" action="/create"> | |||
<input type="hidden" name="_csrf_token" value={@csrf_token} /> | |||
<input type="text" name="example" /> | |||
<input type="submit"> | |||
</form> | |||
</source> | </source> | ||
Revision as of 00:58, 15 March 2024
This page is in progress
This tutorial assumes you have a basic understanding of Elixir and that you have explored Phoenix. It also assumes that you understand HTML forms.
The methodology of this tutorial includes converting a conventional HTML form into a Phoenix template that uses Elixir to communicate with back end code. You also learn how changesets integrate with controllers.
Getting Started
To begin, create a new empty Phoenix app named app. If you do not know how to do that follow this tutorial:
How to Create an Empty Phoenix Application
Creating an HTML Form and Post Request
In the router create these two routes:
scope "/", AppWeb do
pipe_through :browser
get "/", PageController, :index # First route
post "/create", PageController, :new # Second route
end
Place the code below in a file named page_controller.ex. Place the file in the controller directory.
app/lib/app_web/controllers
defmodule AppWeb.PageController do
use AppWeb, :controller
def index(conn, params) do
IO.inspect params
csrf_token = Plug.CSRFProtection.get_csrf_token()
render(conn, :index, data: "Hello World",form: %{},csrf_token: csrf_token)
end
def new(conn, params) do
IO.inspect params
redirect(conn, to: "/")
end
end
In the controllers directory create a file named page_html.ex
In this file, copy this code.
defmodule AppWeb.PageHTML do use AppWeb, :html embed_templates "page_html/*" end
In the controllers directory create another directory named page_html (technically you can place this directory outside the controllers and it will still work).
app/lib/app_web/controllers
This directory will contain heex templates for the PageController.
In the page_html directory place a file named index.html.heex.
Inside the file copy the following code.
<form method="POST" action="/create">
<input type="hidden" name="_csrf_token" value={@csrf_token} />
<input type="text" name="example" />
<input type="submit">
</form>