Структура 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
getHomeR = do
...
postHomeR :: Handler Html
postHomeR = do
...В этом файле есть ещё кое-что, но я специально убрал это, чтобы мы сфокусировались на главном. Итак, ресурс 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.
Ну что ж, первое знакомство с обработчиками прошло успешно. Разумеется, в следующих заметках мы узнаем о них ещё много интересного.