| name | phoenix-framework |
| description | Master Phoenix framework with LiveView, channels, contexts, Ecto, and real-time web applications with Elixir. |
Phoenix Framework
Build real-time web applications with Phoenix, LiveView, channels, and Elixir's concurrent architecture.
Core Patterns
LiveView
defmodule MyAppWeb.UserLive.Index do
use MyAppWeb, :live_view
alias MyApp.Accounts
def mount(_params, _session, socket) do
{:ok, assign(socket, users: Accounts.list_users())}
end
def handle_event("delete", %{"id" => id}, socket) do
user = Accounts.get_user!(id)
{:ok, _} = Accounts.delete_user(user)
{:noreply, assign(socket, users: Accounts.list_users())}
end
end
Controller
defmodule MyAppWeb.UserController do
use MyAppWeb, :controller
alias MyApp.Accounts
def index(conn, _params) do
users = Accounts.list_users()
render(conn, :index, users: users)
end
def create(conn, %{"user" => user_params}) do
case Accounts.create_user(user_params) do
{:ok, user} ->
conn
|> put_status(:created)
|> render(:show, user: user)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(:error, changeset: changeset)
end
end
end
Context
defmodule MyApp.Accounts do
alias MyApp.Accounts.User
alias MyApp.Repo
def list_users do
Repo.all(User)
end
def create_user(attrs) do
%User{}
|> User.changeset(attrs)
|> Repo.insert()
end
end
Best Practices
- Use contexts for domain logic
- Leverage LiveView for interactivity
- Use Ecto changesets for validation
- Implement proper error handling
- Use channels for real-time features
- Write ExUnit tests
- Use telemetry for monitoring