Filtr.Controller (filtr v1.0.1)

Copy Markdown View Source

Provides Phoenix Controller integration with attr-style parameter definitions.

This module enables parameter handling in controllers using a syntax similar to Phoenix Components' attr macro, but using param to define parameters with validation per function.

Usage

defmodule MyAppWeb.UserController do
  use MyAppWeb, :controller
  use Filtr.Controller

  param :name, :string, required: true
  param :age, :integer, min: 18

  def create(conn, params) do
    # params.name is guaranteed to be a string
    # params.age is guaranteed to be an integer >= 18
    json(conn, %{message: "User #{params.name} created"})
  end

  param :q, :string, default: ""
  param :page, :integer, default: 1, min: 1

  def search(conn, params) do
    # params.q is a string (defaults to "")
    # params.page is an integer >= 1 (defaults to 1)
    json(conn, %{query: params.q, page: params.page})
  end
end

Summary

Functions

Defines a parameter with its type and validation options for the next controller function.

Functions

param(name, list)

(macro)

param(name, type, opts \\ [])

(macro)

Defines a parameter with its type and validation options for the next controller function.

Examples

param :name, :string
param :age, :integer, default: 18, min: 0, max: 120
param :email, :string, required: true, pattern: ~r/@/
param :tags, {:list, :string}, default: []