【问题标题】:Location for a Phoenix helper in a hex package十六进制包中 Phoenix 助手的位置
【发布时间】:2021-01-06 23:32:35
【问题描述】:

我创建了一个替代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 使其在目标系统中有效?

回购: https://github.com/wintermeyer/tailwind_phx_generators

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    为了让你的包的用户使用这个帮助程序,他们需要在他们的myapp_web.ex 文件的def view 部分中导入模块。将模块命名为适合您的项目,并在自述文件中为他们提供说明。您可以查看的示例项目是:https://github.com/ikeikeikeike/phoenix_html_simplified_helpers

    引自他们的自述文件:

    3 phoenix_html_simplified_helpers 需要导入(使用)您的 Phoenix 项目。以下描述是在 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
    

    【讨论】:

      【解决方案2】:

      您在 eex 模板化源之后。看看 phoenix 是如何为 e 做的。 G。 context template.

      那么你需要处理它as shown here。简而言之,就是打电话给EEx.eval_file/3

      Mix.Generator.create_file(target, EEx.eval_file(source, binding))
      

      【讨论】:

        猜你喜欢
        • 2019-04-21
        • 1970-01-01
        • 2014-11-20
        • 2020-06-30
        • 2015-11-10
        • 1970-01-01
        • 2011-12-09
        • 2011-06-01
        • 1970-01-01
        相关资源
        最近更新 更多