凤凰 |重定向到 html 中的当前路径

Phoenix | redirect to current path in html

在我的页眉 app.html.eex 我有这个 link:

<a href="<%= Routes.page_path(@conn, :index, locale: "en") %>"><%= gettext "English" %></a>

如果用户在根 / 以外的任何其他路径上,用户将被重定向到根路径,显然是因为我用 ... Routes.page_path(@conn, :index ... 将他们发送到那里。

那么我怎样才能形成一个 link 将用户发送到他所在的页面 但是 和参数 locale: "en" 因为我在浏览器插件中处理这个参数并将其设置为语言 cookie,然后 return 用户到用户所在的页面。

像这样:

<%= Routes.go(@conn.current_path, locale:"en")

我知道实现此目的的唯一方法是您自己编写查询字符串(而不是传递更好的地图)。它看起来像这样:

<a href="<%= Routes.path(@conn, "#{@conn.request_path}?locale=en") %>"><%= gettext "English" %></a>

此 link 会将您带到同一页面,但您将只有 locale=en 查询参数(任何其他参数都将消失)。也就是说,您的 @conn.query_params.

将只有 %{"locale" => "en"}

如果您想自己进一步调查,您应该尝试了解路由器助手的源代码。它住在 $PROJECT/deps/phoenix/lib/phoenix/router/helpers.ex。我发现这段代码很难理解。 unquote 魔法对我来说是新的。