Je voudrais tarir cette commande:before_action: équivalent d'installation à Phoenix
defmodule Xyz.ExampleController do
use Xyz, :controller
alias XyZ.Shops
def a(conn, %{"id" => id}) do
product = Shops.get_product!(id)
tax = product.price * 0.15
...
render(conn, "a.html", foobar: foobar, product: product)
end
def b(conn, %{"id" => id}) do
product = Shops.get_product!(id)
tax = product.price * 0.15
...
render(conn, "b.html", foobar: foobar, tax: tax)
end
def c(conn, %{"id" => id}) do
product = Shops.get_product!(id)
tax = product.price * 0.15
...
render(conn, "c.html", foobar: foobar)
end
end
Chaque fonction commence par cette partie:
product = Shops.get_product!(id)
tax = product.price * 0.15
Dans le monde Ruby on Rails I'D mettre une méthode à appeler avec before_action :setup
pour sécher le contrôleur.
Quelle est la meilleure façon d'obtenir un séchage à Phoenix?
Vous pouvez utiliser un plug -> https://hexdocs.pm/phoenix/plug.html, et je vous en prie, ne mettez pas de logique métier dans les modules de cadre. – JustMichael
Cette logique ne doit pas être dans un contrôleur IMO. Si c'était moi, je définirais une fonction qui fonctionne comme ceci: '{product, tax} = Shops.get_product_and_tax! (Id)' et appelle ça à chaque action. – Dogbert
Que je vais le faire. Je pensais que ce serait plus propre de l'avoir dans une prise. Mais je suis heureux de garder la ligne de code dans chaque action. – wintermeyer