凤凰哪里去defimpl Plug.Exception

Phoenix where to defimpl Plug.Exception

我正在尝试扩展 Phoenix 中的现有异常。

我从文档中看到可以这样做:

defimpl Plug.Exception, for: Ecto.NotSingleResult do
  def status(_exception), do: 404
end

但这去哪儿了?

此外,我有两条管道,一条用于 :browser,一条用于 :api 是否可以在一个管道而不是另一个管道中扩展?

你可以把 Plug.Exception 协议的 defimpl 放在任何你想要的地方,只要它所在的文件被 Mix 加载(例如,libweb).例如,您可以使用以下内容创建 lib/my_app/plug_exception_implementations.ex

defimpl Plug.Exception, for: Ecto.NotSingleResult do
  def status(_exception), do: 404
end

# other `defimpl Plug.Exception`s here if needed

一旦您为数据类型定义了协议的实现,它就是全局的,因此将为两个管道定义它。