【发布时间】:2016-07-01 11:59:07
【问题描述】:
我已经开始自学Phoenix Framework,他们的文档非常好。然而,在指定可选路由参数时,我遇到了一个绊脚石。 Phoenix Framework Routing Documentation 没有提到这是一项功能,所以我假设开发人员有责任提出解决方案。
我将列出我的用例:
- 用户访问位于
/page/test的站点,自定义Plug 然后实现一些代码来查找或分配locale到连接。 - 由于路径中没有
:locale参数,所以按照我的管道中的那一行使用默认值,即plug HelloPhoenix.Plugs.Locale, "en"。 - 用户访问
/fr/page/test的站点,并且在管道中执行相同的代码,除了时间因为:locale参数存在于路由中,自定义Plug (HelloPhoenix.Plugs.Locale)。
现在从路由的角度来看,如果我不能指定 :locale 参数是可选的,我最终会得到双倍的路由数量,例如:
scope "/", HelloPhoenix do
use_pipeline :browser
plug HelloPhoenix.Plugs.Locale, "en"
# Route without locale
get "/page/:slug", PageController, :show
# Route with locale
get "/:locale/page/:slug", PageController, :show
end
如您所知,如果无法指定可选的路由参数,这很快就会变得非常繁重和重复。
不,我确实有一个解决方法,我将在答案中发布,但我不确定它是否 (a) 正确,以及 (b) 最简单的解决方案,因为我我是 Erlang、Elixir 和 Phoenix 的新手(我来自 Ruby 和 PHP OOP 的背景)。
【问题讨论】: