dwyl / content

🔌 A Plug to add Content Negotiation to any Phoenix App so you can render HTML or JSON for the same route.
GNU General Public License v2.0
21 stars 1 forks source link

Phoenix can implicitly render responses based off `Accept` header #7

Open th0mas opened 4 years ago

th0mas commented 4 years ago

Phoenix can already implicitly render different responses based off the Accept header or through forcing a type through the put_accept plug.

def index(conn, _params) do
  doors = Access.list_doors()
  render(conn, :index, doors: doors)
end

Will render "index.json" or "index.html" implicitly.

See https://gist.github.com/chrismccord/31340f08d62de1457454.

In the Phoenix Docs: https://hexdocs.pm/phoenix/Phoenix.Controller.html#render/3

Specifically;

template - which may be an atom or a string. If an atom, like :index, it will render a template with the same format as the one returned by get_format/1. For example, for an HTML request, it will render the "index.html" template. If the template is a string, it must contain the extension too, like "index.json"

nelsonic commented 4 years ago

Yeah, we read that Gist and it makes sense. However we weren't able to get it working consistently in our demo app. Also, we didn't want to have to create a .json template for each route handler. If you can demo it based on the Accept header, please share. 👍