【发布时间】:2015-02-03 18:01:18
【问题描述】:
我在使用 FOSRestBundle 和 Angularjs 资源时遇到了一些问题。
在我的 Symfony 应用程序中,我有两个实体:
class Museum
{
private $id;
private $name;
/**
* @ORM\ManyToOne(targetEntity="EV\CityBundle\Entity\City")
*/
private $city;
// ... Getter and Setteer
}
class City
{
private $id;
private $name;
// ... Getter and Setteer
}
我有一个表格:
$builder->add('name');
$builder->add('price');
$builder->add('city', 'entity', array(
'class' => 'EVCityBundle:City',
'property' => 'name');
所以,我的表单正在等待这样的事情:
array(
name => "Museum of science",
price => "4",
city => 1234
);
它在我的 Symfony 应用程序中运行良好
我使用 JMSSerializerBundle 来配置我想在我的 API 中公开哪些数据。
所以在我的 Angular 应用程序中,我使用 Angularjs Resource 获取数据,然后我得到这样的对象:
{
name: "Museum of science",
price: "4",
city: { "id" : 1234, "name": "France" }
}
而且,当我想保存它时,我使用:
museum.name = "Museum of Super science";
museum.city.id = 1337;
museum.city.name = "Lyon";
museum.$save()
通过 POST 请求发送的数据是:
{
name: "Museum of science edited",
price: "5",
city: { "id" : 1337, "name": "Lyon" }
}
但由于我的表单正在等待 { city : id },我无法保存新的城市 ID。
我能做到:
$request->request->set('city', $request->request->get('city')[id]);
但它很丑,我很难在我的应用程序中管理,因为我有很多带有子实体的实体。
所以,我的问题是:有一种方法可以自动正确地重新映射数据?
非常感谢!
【问题讨论】:
标签: angularjs symfony angularjs-resource