Php Symfony Api Post/Put实体多个

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=

我在api中有端点post团队。实体团队有关系实体等级,很多,在形式上,当我创建团队时,我添加等级实体,条令为我做所有工作-刷新实体。但我有api并使用JMS序列化程序。如何使用帮助表单刷新api中的实体团队??? 实体团队

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刷新实体团队,因为使用表单可以很好地工作