diff --git a/README.md b/README.md index c47d042..e6e60da 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ variety of languages and technologies. These are things that don't really warrant a full blog post. These are mostly things I learn by pairing with smart people at [Hashrocket](http://hashrocket.com/). -_469 TILs and counting..._ +_470 TILs and counting..._ --- @@ -192,6 +192,7 @@ _469 TILs and counting..._ ### Phoenix +- [Bypass Template Rendering](phoenix/bypass-template-rendering.md) - [Render A Template To A String](phoenix/render-a-template-to-a-string.md) ### PostgreSQL diff --git a/phoenix/bypass-template-rendering.md b/phoenix/bypass-template-rendering.md new file mode 100644 index 0000000..aaebd07 --- /dev/null +++ b/phoenix/bypass-template-rendering.md @@ -0,0 +1,32 @@ +# Bypass Template Rendering + +Generally when rendering a response to a request in a Phoenix app, the +controller will make a render call that targets a specific template. If it +suits our needs, we can skip writing a template and bypass the template +portion of the response pipeline by implementing our own `render` function +directly in the view module. + +Consider the following route and controller action: + +```elixir +# web/router.ex +get "/hello", UserController, :hello + +# web/controllers/user_controller.ex +def hello(conn, _params) do + render(conn, "hello.html") +end +``` + +The render call would normally trigger a corresponding template function, +but we bypass it by adding the following function to our view module: + +```elixir +# web/views/user_view.ex +def render("hello.html", _assigns) do + "Hello, World!" +end +``` + +Visiting `/hello` will render a page with the view's layout and the words +"Hello, World!".