Adding Global View Helpers to a Phoenix Application

Posted by in Phoenix, updated on

Introduction

If you come from a Ruby on Rails background you might be used to having view helpers such as number_with_delimiter up your sleeve and ready to use in any view. Here's how to configure functions that are accessible in your Phoenix views:

Create a helper module

I usually create a helpers directory under the app_name_web directory. Next create a new module, let's call it application_helper.ex:

defmodule YourApp.ApplicationHelper do
def number_with_delimiter(integer) do
integer
|> Integer.to_char_list
|> Enum.reverse
|> Enum.chunk_every(3, 3, [])
|> Enum.join(",")
|> String.reverse
end
end

Import your helper module

If we want call these functions without prepending the module name (number_with_delimiter instead of ApplicationHelper.number_with_delimiter), then we need to import the module.

You could import it in the view module for the views you're about to use it in, however if we want the function available to us in any view then we need to import it in lib/your_app_web.ex instead:

def view do
quote do
...

# Import custom helpers here
import YourAppWeb.ApplicationHelper
end
end
end

Now you can call the function in any of your views:

<ul>
<%= for user <- @users do %>
<li><%= user.age_in_days |> number_with_delimiter %></li>
<% end %>
</ul>

Recent Posts