Структура Yesod-проекта: обработчики
Приветствую!
Сегодня мы продолжаем изучать структура Yesod-проекта. Пришла пора взглянуть на содержимое каталога Handler
.
Ресурсы
Вспомним корневой маршрут, задаваемый в файле config/routes
:
/ HomeR GET POST
Все GET-
и POST
-запросы, направленные к корневой странице нашего приложения, будут обработаны сущностью, называемой HomeR
. И теперь пришла пора заглянуть в каталог Handler
:
Home.hs
В этом каталоге расположены файлы, содержащие код наших обработчиков. Откроем файл Home.hs
и взглянем на них:
module Handler.Home where
import Import
getHomeR :: Handler Html
= do
getHomeR ...
postHomeR :: Handler Html
= do
postHomeR ...
В этом файле есть ещё кое-что, но я специально убрал это, чтобы мы сфокусировались на главном. Итак, ресурс HomeR
представлен двумя обработчиками: GET
-запросы принимает функция getHomeR
, а POST
-запросы - функция postHomeR
. Обратите внимание: имена этих функций образованы от имени ресурса HomeR
путём приписывания к нему префиксов get
и post
(как вы помните, имя Haskell-функции всегда начинается с маленькой буквы). Впрочем, сейчас мы не станем рассматривать тела этих функций, это тема для отдельного разговора.
Обратите также внимание на имя модуля Handler.Home
. В Yesod-проектах принято, что имя модуля, содержащего код обработчиков для ресурса, совпадает с именем этого ресурса, за вычетом буквы R
. Таким образом, ресурсу HomeR
соответствует модуль Handler.Home
, а, скажем, ресурсу ContactsR
будет соответствовать модуль Handler.Contacts
.
Иерархия
Разумеется, файлы внутри каталога Handler
могут располагаться в некой иерархии. В реальном проекте это значительно удобнее, нежели валить все файлы в одну кучу. Например, в моём проекте файлы, отвечающие за аутенификационные аспекты, расположены в отдельном подкаталоге, в частности:
Handler/
Authentication/
Error.hs
VerificationLetter.hs
В этом случае модуль, отвечающий за обработку неудачной попытки залогиниться, называется Handler.Authentication.Error
.
Ресурсы по умолчанию
В списке наших маршрутов присутствуют, в частности, вот эти два:
/favicon.ico FaviconR GET
/robots.txt RobotsR GET
Первый возвращает наш любимый favicon, второй возвращает заметки для поисковых роботов. Помните содержимое каталога config
? Там уже лежат файлы favicon.ico
и robots.txt
, вот они и возвращаются.
Но вы спросите, а где же определены соответствующие обработчики? Ведь для ресурса HomeR
есть файл Handler/Home.hs
, однако файлов Handler/Favicon.hs
и Handler/Robots.hs
мы не видим. А всё очень просто: соответствующие обработчики уже определены внутри нашего проекта.
Дело в том, что Yesod делает за нас кое-какие рутинные операции. Согласитесь, файлы favicon.ico
и robots.txt
нужны в любом веб-приложении. Ну а раз они нужны, Yesod создаёт их за нас автоматически. Нам остаётся только лишь заменить config/favicon.ico
и подредактировать, при необходимости, содержимое config/robots.txt
.
Ну что ж, первое знакомство с обработчиками прошло успешно. Разумеется, в следующих заметках мы узнаем о них ещё много интересного.