All controller actions should have an arity of 2, with the first argument being a Plug.Conn representing the current connection and the second argument being a Keyword list of any parameters captured in the route path; both of these arguments are passed to the controller action from the router when a request is received.
To illustrate: if your router receives a GET request for /2, and your router has a route that points a GET for /:id to YourApplication.Controller.Main.show, your controller’s show will receive a Plug.Conn as its first argument and [id: 2] as its second argument. Similarly, if your router receives a POST request for /2?title=foo&body=Hello%20world, and has a route that points a POST for /:id to YourApplication.Controller.Main.update, your controller’s update will receive a Plug.Conn as its first argument (where conn.params is %{"title" => "foo", "body" => "Hello world"}) and [id: 2] as its second argument.
Sugar bundles these response helpers to assist in sending a response:
render/2 - conn, template - sends a normal response.halt!/1 - conn - ends the response.not_found/1 - conn - sends a 404 (Not found) response.json/2 - conn, data - sends a normal response with
data encoded as JSON.raw/1 - conn - sends response as-is. It is expected
that status codes, headers, body, etc have been set by
the controller action.defmodule Hello do
use Sugar.Controller
def index(conn, []) do
render conn, "showing index controller"
end
def show(conn, args) do
render conn, "showing page \#{args[:id]}"
end
def update(conn, args) do
%{"title" => title, "body" => body} = conn.params
render conn, "edited page #{args[:id]} with title: #{title}, body: #{body}"
end
def create(conn, []) do
render conn, "page created"
end
def get_json(conn, []) do
json conn, %{message: "foobar"}
end
end
Sugar is released under the MIT License.
Theme based on Bolt by BlackTie.co.