十六进制包中 Phoenix 助手的位置
Location for a Phoenix helper in a hex package
我创建了一个替代方案 phx.gen.html
,它使用 TailwindCSS 创建模板。它工作正常。我想通过创建一个十六进制包 phx_tailwind_generators
来分享它。这是我的票价:
$ phx_tailwind_generators:main> tree
.
├── README.md
├── lib
│ ├── phx_tailwind_generators.ex
├── mix.exs
├── priv
│ └── templates
│ └── tailwind.gen.html
│ ├── controller.ex
│ ├── controller_test.exs
│ ├── edit.html.eex
│ ├── form.html.eex
│ ├── index.html.eex
│ ├── new.html.eex
│ ├── show.html.eex
│ └── view.ex
└── test
├── phx_tailwind_generators_test.exs
└── test_helper.exs
在这些模板中,我使用了此处定义的 tailwind_error_tag/2
助手:
defmodule ExampleWeb.TailwindHelper do
use Phoenix.HTML
import ExampleWeb.ErrorHelpers
@doc """
Generates tag for inlined form input errors.
"""
def tailwind_error_tag(form, field) do
Enum.map(Keyword.get_values(form.errors, field), fn error ->
content_tag(:p, translate_error(error),
class: "mt-2 text-sm text-red-500",
phx_feedback_for: input_name(form, field)
)
end)
end
end
但是如何将这个帮助器定义存储在 hex 包中?如何以在目标系统中工作的方式重命名 defmodule ExampleWeb.TailwindHelper do
?
您正在 eex
模板化来源。看看 phoenix 如何为 e 做这件事。 G。 context template.
然后你需要处理它as shown here. In a nutshell, it’ll be all about calling EEx.eval_file/3
。
Mix.Generator.create_file(target, EEx.eval_file(source, binding))
为了让您的包的用户使用这个助手,他们需要在他们的 myapp_web.ex
文件的 def view
部分导入模块。将模块命名为适合您的项目,并在您的自述文件中为他们提供说明。您可以签出的示例项目是:https://github.com/ikeikeikeike/phoenix_html_simplified_helpers.
引自他们的自述文件:
3 phoenix_html_simplified_helpers need to import(use) your Phoenix project. The following description is adding 'use syntax' into web.ex.
def view do
quote do
use Phoenix.View, root: "web/templates"
# Import convenience functions from controllers
import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1]
# Use all HTML functionality (forms, tags, etc)
use Phoenix.HTML
use Phoenix.HTML.SimplifiedHelpers # <- this line.
import MyApp.Router.Helpers
import MyApp.ErrorHelpers
import MyApp.Gettext
end
end
我创建了一个替代方案 phx.gen.html
,它使用 TailwindCSS 创建模板。它工作正常。我想通过创建一个十六进制包 phx_tailwind_generators
来分享它。这是我的票价:
$ phx_tailwind_generators:main> tree
.
├── README.md
├── lib
│ ├── phx_tailwind_generators.ex
├── mix.exs
├── priv
│ └── templates
│ └── tailwind.gen.html
│ ├── controller.ex
│ ├── controller_test.exs
│ ├── edit.html.eex
│ ├── form.html.eex
│ ├── index.html.eex
│ ├── new.html.eex
│ ├── show.html.eex
│ └── view.ex
└── test
├── phx_tailwind_generators_test.exs
└── test_helper.exs
在这些模板中,我使用了此处定义的 tailwind_error_tag/2
助手:
defmodule ExampleWeb.TailwindHelper do
use Phoenix.HTML
import ExampleWeb.ErrorHelpers
@doc """
Generates tag for inlined form input errors.
"""
def tailwind_error_tag(form, field) do
Enum.map(Keyword.get_values(form.errors, field), fn error ->
content_tag(:p, translate_error(error),
class: "mt-2 text-sm text-red-500",
phx_feedback_for: input_name(form, field)
)
end)
end
end
但是如何将这个帮助器定义存储在 hex 包中?如何以在目标系统中工作的方式重命名 defmodule ExampleWeb.TailwindHelper do
?
您正在 eex
模板化来源。看看 phoenix 如何为 e 做这件事。 G。 context template.
然后你需要处理它as shown here. In a nutshell, it’ll be all about calling EEx.eval_file/3
。
Mix.Generator.create_file(target, EEx.eval_file(source, binding))
为了让您的包的用户使用这个助手,他们需要在他们的 myapp_web.ex
文件的 def view
部分导入模块。将模块命名为适合您的项目,并在您的自述文件中为他们提供说明。您可以签出的示例项目是:https://github.com/ikeikeikeike/phoenix_html_simplified_helpers.
引自他们的自述文件:
3 phoenix_html_simplified_helpers need to import(use) your Phoenix project. The following description is adding 'use syntax' into web.ex.
def view do quote do use Phoenix.View, root: "web/templates" # Import convenience functions from controllers import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1] # Use all HTML functionality (forms, tags, etc) use Phoenix.HTML use Phoenix.HTML.SimplifiedHelpers # <- this line. import MyApp.Router.Helpers import MyApp.ErrorHelpers import MyApp.Gettext end end