View Source Routex.Extension.Alternatives (Phoenix Routes Extension Framework v0.3.0-alpha.4)
Creates alternative routes based on branches
configured in a Routex backend
module. Branches can be nested and each branch can provide Routex.Attrs
to be shared
with other extensions.
Configuration
# file /lib/example_web/routex_backend.ex
# This example uses a `Struct` for custom attributes, so there is no attribute inheritance;
# only struct defaults. When using maps, nested branches will inherit attributes from their parent.
+ defmodule ExampleWeb.RoutexBackend.AltAttrs do
+ @moduledoc false
+ defstruct [:contact, locale: "en"]
+ end
defmodule ExampleWeb.RoutexBackend do
+ alias ExampleWeb.RoutexBackend.AltAttrs
use Routex.Backend,
extensions: [
+ Routex.Extension.Alternatives,
Routex.Extension.AttrGetters
],
+ alternatives: %{
+ "/" => %{
+ attrs: %AltAttrs{contact: "root@example.com"},
+ branches: %{
+ "/europe" => %{
+ attrs: %AltAttrs{contact: "europe@example.com"},
+ branches: %{
+ "/nl" => %{attrs: %AltAttrs{locale: "nl", contact: "verkoop@example.nl"}},
+ "/be" => %{attrs: %AltAttrs{locale: "nl", contact: "handel@example.be"}}
+ }
+ },
+ "/gb" => %{attrs: %AltAttrs{contact: "sales@example.com"}
+ }
+ },
+ alternatives_prefix: false # whether to automatically prefix routes, defaults to true
Pseudo result
⇒ /products/:id/edit locale: "en", contact: "rootexample.com"
/products/:id/edit ⇒ /europe/nl/products/:id/edit locale: "nl", contact: "verkoop@example.nl"
⇒ /europe/be/products/:id/edit locale: "nl", contact: "handel@example.be"
⇒ /gb/products/:id/edit locale: "en", contact: "sales@example.com"
Routex.Attrs
Requires
- none
Sets
- any key/value in
:attrs
- branch_helper
- branch_alias
- branch_prefix
- branch_opts
- alternatives (list of
Phoenix.Route.Route
)