add formrequest trait

this makes sure key values are maintained in error message bag
refactor to use contracts only