I know this thread is old, but I was struggling with the same question, so I’ll post the answer in case anyone else comes across this thread like I did.
tl;dr:
form_for
should no longer be used and will eventually be removed from Phoenix.- In LiveView, use
<.form for={@form}>
where@form
is aPhoenix.HTML.Form
struct (generally created usingto_form
). Don’t use:let
. - Outside of LiveView, you can also pass a changeset or map to
for
, and it’ll be converted to aForm
which can be captured with:let
. (This approach is also technically possible in a LiveView, but it’s discouraged because it makes change tracking less efficient.)
The second and third points are made clear in the docs for form/1. The first point was confirmed to me by none other than Chris McCord; I wrote about it here: