【问题标题】:Elixir / Phoenix: Why do route helpers require @conn?Elixir / Phoenix:为什么路由助手需要@conn?
【发布时间】:2019-06-23 17:50:39
【问题描述】:

在编写 Phoenix 应用程序时,我已经习惯使用如下语法编写链接:link "My profile", to: Routes.user_url(@conn, :show, user)。最近在使用LiveView 时,我意识到你可以在这里传递MyAppWeb.Endpoint 而不是@conn,它的工作原理是一样的。由于(我想)大多数 Phoenix 应用程序只有一个 Endpoint 模块,我有点希望它能够推断出我的默认 Endpoint,这样我就不必每次调用路径/url 助手时都提供 conn/endpoint。这让我想知道为什么 Phoenix 将这些帮助程序设计为始终需要端点,而不是使用一些配置的默认端点。

有谁知道为什么路由助手设计为始终需要连接/端点,并且不允许您配置默认端点?这仅仅是“还没有解决这个问题”的问题,还是有一些重要的原因导致每次都明确要求 conn/endpoint 会有问题?

【问题讨论】:

  • 我不确定,但我猜部分原因来自 Elixir 的“显式优于隐式”的哲学。您可能需要输入一些额外的字符,但您不会因更改配置而意外更改所有路线。
  • 我相信 Chris McCord 在此线程中的答案正是您想要的:elixirforum.com/t/conn-or-endpoint-in-path-helpers/934

标签: elixir phoenix-framework


【解决方案1】:

连接具有超出端点的附加信息。例如,如果您的应用程序中有两个路由器,其中一个调用另一个,您需要能够将原始路径组合在一起(由于 CGI 遗留原因,这通常称为script_name)。此外,put_router_uri 等新 API 允许您在连接中存储要在给定请求中使用的基本 URI,例如,如果您想为当前登录的用户设置子域,并且此信息不能是全局的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2016-10-17
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多