-
Notifications
You must be signed in to change notification settings - Fork 37
Description
This might be slightly related to #62.
Let's say that I have these data types:
data Something = Something
{ field01 :: Text
, field02 :: Text
}
data StepInstruction = StepInstruction
{ id :: Int
, order :: Int
, description :: Text
}
data Recipe = Recipe
{ id :: Int
, name :: Text
, something :: Something
, instructions :: [StepInstruction]
}
In PHP I could easily submit a form with such data type and get it back in the form of a nested array. Convention for submitting Recipe is as follows:
?id=0
&name=Recipe01
&instructions[0][id]=0
&instructions[0][order]=1
&instructions[0][description]=somedescription
&instructions[1][id]=1
&instructions[1][order]=2
&instructions[1][description]=someotherdescription
Currently Query flat and I'd have to do additional parsing on the argument names to get an array of structured arguments.
I'm not sure if this is a standard, but I've also seen the same convention in C#/MVC so I think it would be a good idea to support such feature, because I might want to add repeating "sub forms" to my main form that should be contained in array, and currently there is no good way to do that from what I can see.
Here is also an example of a form that might submit such query:
<form>
<input type="hidden" name="id">
<input type="text" name="name">
<input type="text" name="something[field01]">
<input type="text" name="something[field02]">
<div>
<input type="hidden" name="instructions[0][id]">
<input type="number" name="instructions[0][order]">
<input type="text" name="instructions[0][description]">
</div>
<div>
<input type="hidden" name="instructions[1][id]">
<input type="number" name="instructions[1][order]">
<input type="text" name="instructions[1][description]">
</div>
<div>
<input type="hidden" name="instructions[2][id]">
<input type="number" name="instructions[2][order]">
<input type="text" name="instructions[2][description]">
</div>
</form>
Maybe QueryItem should look something like this:
data QueryItem
= PlainValue ByteString
| QueryItemList [QueryItem]
| QueryItem (ByteString, Maybe QueryItem)