Я работаю над переносом сайта с PHP на Snap w/Heist. Я портировал некоторые из более простых форм на использование Digestive Functors успешно, но теперь мне приходится делать сложные задачи, требующие использования подформ.
Это приложение управляет выпуском листовок для розничных магазинов, поэтому одной из задач, которые необходимо выполнить, является добавление размера объявления и определение его физических размеров на напечатанном флаере. Размеры могут варьироваться в зависимости от типа страницы (настраиваемой владельцем листовки) и ее ориентации (которую могут контролировать только администраторы).
Эта форма гарантированно имеет минимум 3 ячейки, скорее всего, будет иметь 9 ячеек (как изображено выше из версии PHP), но теоретически может иметь неограниченное число.
Вот что я получил до сих пор для формы формы:
data AdDimensions = AdDimensions
{ sizeId :: Int64
, layoutId :: Int64
, dimensions :: Maybe String
}
adDimensionsForm :: Monad m => AdDimensions -> Form Text m AdDimensions
adDimensionsForm d = AdDimensions
<$> "size_id" .: stringRead "Must be a number" (Just $ sizeId d)
<*> "layout_id" .: stringRead "Must be a number" (Just $ layoutId d)
<*> "dimensions" .: opionalString (dimensions d)
Определение формы не совсем правильно (может быть, у меня есть совершенно неправильная идея здесь?). AdDimensions.dimensions
должен быть Maybe String
, так как он будет null при возврате из базы данных при запуске запроса, чтобы получить список всех возможных комбинаций size_id/layout_id для нового размера объявления, но это не будет null из аналогичного запроса, который будет запущен при создании формы редактирования. Само требуется поле (ad_dimensions.dimensions
установлено в not null
в базе данных).
Отсюда я не знаю, куда пойти, чтобы сообщить родительской форме, что у нее есть список подформ или как я могу сделать их с помощью Heist.