Php Symfony Api Post/Put实体多个
我在api中有端点post团队。实体团队有关系实体等级,很多,在形式上,当我创建团队时,我添加等级实体,条令为我做所有工作-刷新实体。但我有api并使用JMS序列化程序。如何使用帮助表单刷新api中的实体团队??? 实体团队Php Symfony Api Post/Put实体多个,php,symfony,doctrine-orm,jmsserializerbundle,Php,Symfony,Doctrine Orm,Jmsserializerbundle,我在api中有端点post团队。实体团队有关系实体等级,很多,在形式上,当我创建团队时,我添加等级实体,条令为我做所有工作-刷新实体。但我有api并使用JMS序列化程序。如何使用帮助表单刷新api中的实体团队??? 实体团队 class Teams { use Timestampable; /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy=
class Teams
{
use Timestampable;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Groups({"for_chat", "get_team", "for_sample_set", "for_sample", "for_team_members", "for_profile_project", "for_all_projects"})
*/
protected $id;
/**
* @Gedmo\Slug(fields={"name"})
* @ORM\Column(name="slug", type="string", length=255, nullable=false)
* @Groups({"get_team"})
*/
protected $slug;
/**
* @ORM\ManyToMany(targetEntity="Rank", inversedBy="teams")
* @ORM\JoinTable(name="rank_teams")
* @Groups({"get_team"})
*/
private $rank;
朗克
表单内添加实体runk
$form->add('rank', 'entity', array(
'class' => 'ArtelProfileBundle:Rank',
'property' => 'name',
'expanded' => true,
'multiple' => true,
'required' => false,
));
现在我如何发布实体团队
/**
* Post Team,.
*
* @ApiDoc(
* resource = true,
* description = "Post Team",
* parameters={
* {"name"="image_back", "dataType"="string", "required"=false, "description"="image_back"},
* {"name"="name", "dataType"="string", "required"=true, "description"="name"},
* {"name"="description", "dataType"="string", "required"=false, "description"="description"},
* {"name"="image", "dataType"="string", "required"=false, "description"="image"},
* {"name"="profile_summary", "dataType"="string", "required"=false, "description"="profile_summary"},
* {"name"="web_site", "dataType"="string", "required"=false, "description"="web_site"},
* {"name"="markets", "dataType"="array", "required"=false, "description"="markets"},
* {"name"="skills", "dataType"="array", "required"=false, "description"="skills"},
* {"name"="city", "dataType"="string", "required"=false, "description"="location teams"},
* {"name"="ranks", "dataType"="array", "required"=false, "description"="rank"},
* {"name"="avalible_from", "dataType"="date", "required"=false, "description"="avalible_from like 2013-07-21T01:16:22-0500"},
* {"name"="avalible_to", "dataType"="date", "required"=false, "description"="avalible_to like 2013-07-21T01:16:22-0500"},
* {"name"="token", "dataType"="string", "required"=true, "description"="is equally md5('email'.secret_word)"}
* },
* statusCodes = {
* 200 = "Returned when successful",
* 400 = "Secret token is not valid"
* },
* section="Team"
* )
*
* @RestView()
*
* @param Request $request
*
* @return View
*
* @throws NotFoundHttpException when not exist
*/
public function postTeamAction(Request $request)
{
$manager = $this->getDoctrine()->getManager();
$token = $this->get('request')->request->get('token');
$user = $this->getDoctrine()->getRepository('ArtelProfileBundle:Users')->findOneBySecuritytoken($token);
if (!empty($user) && !empty($token)) {
$team = new Teams();
$data = $request->request->all();
$data = $this->get('serializer')->serialize($data, 'json');
$team = $this->get('serializer')->deserialize($data, 'Artel\ProfileBundle\Entity\Teams', 'json');
if (count($errors = $this->get('validator')->validate($team)) > 0) {
$view = $this->view((string) $errors, 400);
return $this->handleView($view);
}
if (!is_null($this->get('request')->request->get('city'))) {
$nameCity = $this->get('request')->request->get('city');
$city = $this->get('artel.profile.additional_function')->addCityAction($nameCity);
$team->setLocation($city);
}
if (!is_null($this->get('request')->request->get('ranks'))) {
$ranks = $this->get('request')->request->get('ranks');
foreach($ranks as $rank){
$rankEntity = $this->get('artel.profile.additional_function')->checkRank($rank);
$team->addRank($rankEntity);
}
}
$manager->persist($team);
$user->setTeams($team);
$manager->flush();
$view = $this->view('Team successful create', 200);
return $this->handleView($view);
} else {
$view = $this->view('Secret token is not valid', 400);
return $this->handleView($view);
}
}
但是JMS序列化程序不知道很多级别。对于许多城市,我加上这样的话
if (!is_null($this->get('request')->request->get('city'))) {
$nameCity = $this->get('request')->request->get('city');
$city = $this->get('artel.profile.additional_function')->addCityAction($nameCity);
$team->setLocation($city);
}
如果$city是实体城市,我会检查是否已经返回或创建新的返回。但这是一种定制方法,而不是wotk。我创造了这样的东西
if (!is_null($this->get('request')->request->get('ranks'))) {
$ranks = $this->get('request')->request->get('ranks');
foreach($ranks as $rank){
$rankEntity = $this->get('artel.profile.additional_function')->checkRank($rank);
$team->addRank($rankEntity);
}
}
但这是一种不通用的方法,只适用于post。如果我用放这是方法不删除排名自动像条令和形式。例如,我有两个等级,但在编辑形式中,我选择了一个——自动删除和自动添加实体runk
$form->add('rank', 'entity', array(
'class' => 'ArtelProfileBundle:Rank',
'property' => 'name',
'expanded' => true,
'multiple' => true,
'required' => false,
));
如何使用帮助表单使用许多runk刷新实体团队,因为使用表单可以很好地工作