无法在Phoenix / Elixir中呈现我没有布局的错误视图

时间:2016-11-27 05:38:43

标签: elixir phoenix-framework

我想在没有布局的情况下渲染我的错误视图:

defmodule MyApp.ErrorView do
  use MyApp.Web, :view

  def render("404.html", assigns) do # renders my_404.html.eex template
    render(__MODULE__, "my_404.html")
  end

行动:

def my_action(conn) do
  if something_wrong do
    conn
    |> put_status(404)
    |> render(MyApp.ErrorView, "404.html")


    # conn
    # |> put_status(404)
    # |> put_layout(false)
    # |> put_view(MyApp.ErrorView)
    # |> render("404.html")

但它不起作用,它呈现我的主要应用程序模板。当我取消注释我的代码的第二部分并注释掉第一部分时,它将永远挂起并且不会渲染任何内容。

此外,我希望能够在 ErrorView 中设置layout false,因为我不想从所有的每个操作中调用put_layout(false)我的控制员。

1 个答案:

答案 0 :(得分:0)

我会做的是:

  • 引发已定义的异常并将plug_status字段设置为404,例如Ecto.NoResultsError

  • 定义您自己的异常模块,它执行相同的

    defmodule WhoopsyError do
      defexception [:message, :plug_status]
    
      def exception(_) do
        %__MODULE__{message: "Whoopsy!", plug_status: 404}
      end
    end
    

凤凰城将接​​管并为您呈现错误视图而无需模板。