Эликсир / Феникс: Почему помощникам по маршруту требуется @conn? - PullRequest
3 голосов
/ 21 июня 2019

При написании приложений для Phoenix я привык писать ссылки, используя следующий синтаксис: link "My profile", to: Routes.user_url(@conn, :show, user).Недавно при работе с LiveView я понял, что вы можете передать MyAppWeb.Endpoint вместо @conn, и это будет работать так же.Поскольку (я полагаю) большинство приложений Phoenix имеют только один модуль Endpoint, я бы хотел, чтобы он выводил мою конечную точку по умолчанию, чтобы мне не приходилось указывать conn / endpoint каждый раз, когда я вызываю помощника path / url.И меня удивляет, почему Phoenix разработал эти помощники так, чтобы они всегда требовали конечную точку, вместо того, чтобы использовать какую-то настроенную конечную точку по умолчанию.

Кто-нибудь знает, почему помощники маршрута были спроектированы так, чтобы всегда требовать подключения / конечной точки, и не 'Позволяет настроить конечную точку по умолчанию?Это просто вопрос «еще не дошел до этого», или есть какая-то важная причина, по которой было бы проблематично , а не явно требовать conn / endpoint каждый раз?

1 Ответ

4 голосов
/ 22 июня 2019

Соединение имеет дополнительную информацию за пределами конечной точки. Например, если в вашем приложении есть два маршрутизатора, один из которых вызывает другой, вам нужно иметь возможность собрать исходный путь обратно вместе (это обычно называется script_name по причинам устаревшего CGI). Кроме того, новые API, такие как put_router_uri, позволяют хранить в соединении, какой базовый URI будет использоваться в данном запросе, например, если вы хотите установить поддомен для текущего пользователя, вошедшего в систему, и эта информация не может быть глобальной.

...