我需要将数组形式的数据映射到实体。数据不是来自请求,而是由应用程序从远程源获取的。
我想使用表单将数据映射到实体。这就是我如何将表单作为服务实例化并将其传递给我的自定义类(ApiResponseMapper
):
book_form_type:
class: Air'BookishBundle'Form'Type'BookType
name:
- { name: form.type, alias: book_type }
book_form:
factory_service: form.factory
factory_method: create
class: Symfony'Component'Form'Form
arguments: [@book_form_type]
api_response_mapper:
class: Air'BookishBundle'Lib'ApiResponseMapper
arguments: [@bestseller_list_form, @book_form]
在ApiResponseMapper
中,我希望能够将数据映射到数组中:
public function mapResponse($response)
{
$form = $this->bookForm; // bookForm is a now a memeber of this class.
$form->submit($response);
}
这不会将$response
(数组数据)映射到我的Book
实体(bookForm
将Book
类设置为data_class
)。我从Symfony开始,我真的不确定如何使用这个表单来映射$response。"传统"方法是在控制器中调用类似这样的东西:$form = $this->createForm(new BookType(), $Book);
,但正如您所看到的,这种情况是不同的。
我需要绕过handleRequest()
,手动调用submit()
。在此场景中,如何将数据映射到实体上?
解决方案相当简单。也许将来它能帮到别人。我的方法是这样的:
public function mapResponse($response)
{
$Book = new Book();
$form = $this->bookForm;
$form->setData($Book);
$form->submit($response);
return $Book;
}
被映射到的类应该被实例化并作为参数传递给在form对象上调用的setData()
。请注意,这个特定的示例没有对表单.