Elixir / Phoenix:为什么路由助手需要@conn?

时间:2019-06-21 10:15:21

标签: elixir phoenix-framework

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

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

1 个答案:

答案 0 :(得分:4)

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