Я думаю, что для этого есть две причины.Первый заключается в том, как имя модуля становится известным.В вашем примере у вас есть область действия для HelloWeb
, а затем конечная точка get в PageController
.На самом деле это вызывает модуль HelloWeb.PageController
.
Вторая причина, которая, на мой взгляд, здесь более важна, заключается в том, что функция фактически не вызывается напрямую.Когда вы use HelloWeb, :controller
, он определяет функцию action/2
для вас в вашем модуле.Эта action/2
функция - то, что вызывается.Он просто вызывает указанную вами функцию.
Может показаться, что это излишне сложно.Но это позволяет нам определить вашу собственную функцию action/2
в вашем модуле, чтобы переопределить функцию, предоставляемую Phoenix.Возможно, все действия в данном модуле требуют записи из базы данных.Это то место, где вы можете сделать это и поместить его в назначение соединения.