繁体   English   中英

在Symfony2中使用FOSRestBundle删除收集子项

[英]Deleting a collection child with FOSRestBundle in Symfony2

我使用Symfony2作为REST后端,使用AngularJS作为我的前端(在混合移动应用程序中)。

我的REST界面运行良好,但无法删除集合的子项。 我正在使用jms serli在此示例中,我有联系人,每个联系人可以具有许多功能。 我想删除一个功能。

但是我的api没有删除任何内容。 我不明白为什么。

这是我的控制器代码:

/**
 * Put action
 * @var Request $request
 * @var integer $id Id of the entity
 * @return RestView|array
 */
public function putContactAction(Request $request, $id)
{

    $log = $this->get('logger');
    $em = $this->getDoctrine()->getManager();

    try {
        $testContact = $this->get('jms_serializer')->deserialize($request->getContent(), 'Curuba\contactsBundle\Entity\contacts', 'json');
        $em->merge($testContact);
        $em->flush();


        return RestView::create(null, Codes::HTTP_NO_CONTENT);
    }
    catch(Exception $e) {
        $log->error('deserializer issue ' . $e);
    }

    return RestView::create(null, Codes::HTTP_NO_CONTENT);
}

这是我的实体:

/**
 * contacts
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Curuba\contactsBundle\Entity\Repository\contactsRepository")
 * @ORM\HasLifecycleCallbacks()
 * @UniqueEntity(fields={"nom", "prenom"}, message="Ce contact existe déjà.")
 *
 */
class contacts
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=80)
     *
     * @Assert\NotBlank()
     */
    private $nom;

    /**
     * @var string
     *
     * @ORM\Column(name="prenom", type="string", length=40)
     *
     * @Assert\NotBlank()
     *
     */
    private $prenom;

    /**
     * @var string
     *
     * @ORM\Column(name="fullname", type="string", length=62, nullable=true)
     */
    private $fullname;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated", type="datetime")
     *
     */
    private $updated;

    /**
     * @var string
     *
     * @ORM\Column(name="prefix", type="string", length=12, nullable=true)
     *
     */
    private $prefix;

    /**
     *
     * @var boolean
     *
     * @ORM\Column(name="communications", type="boolean", nullable=false)
     *
     */
    private $communications;

    /**
     * @ORM\ManyToOne(targetEntity="users", inversedBy="contacts")
     * @ORM\JoinColumn(nullable=false)
     *
     * @Assert\NotBlank()
     *
     */
    private $referent;


    /**
     * @ORM\ManyToOne(targetEntity="groupes", inversedBy="contacts")
     */
    private $groupe;

    /**
     * @ORM\ManyToOne(targetEntity="sources", inversedBy="contacts")
     */
    private $source;

    /**
     * @ORM\OneToMany(targetEntity="fonctions", mappedBy="contact", cascade={"all"}, orphanRemoval=true)
     * @ORM\JoinColumn(nullable=true)
     */
    private $fonctions;

    /**
     * @ORM\OneToMany(targetEntity="Curuba\contactsBundle\Entity\commentaires", mappedBy="contact", orphanRemoval=true, cascade={"remove", "persist"})
     * @ORM\JoinColumn(nullable=true)
     */
    private $commentaires;

}

如下所示,有效负载不包含函数id = 2,因此应将其删除:

{
    "id": 1,
    "nom": "lastname",
    "prenom": "firstnalastnameme",
    "fullname": "fullname, firstname",
    "updated": "2015-07-12T14:29:35+0200",
    "prefix": "Monsieur",
    "communications": true,
    "referent": {
        "id": 3,
        "fullname": "Doe, John"
    },
    "source": {
        "id": 1,
        "nom": "source1"
    },
    "fonctions": [{
        "id": 1,
        "fonction": "Directeur",
        "perso_fixe": "01 01 01 01 01",
        "perso_mobile": "06 06 06 06 06",
        "updated": "2015-05-25T19:21:03+0200",
        "entite": {
            "id": 1,
            "nom": "Monster",
            "adresse": "18 rue de la Paix",
            "ville": "Paris",
            "cp": "75000",
            "updated": "2015-05-22T17:32:06+0200",
        }
    }]
}

我最后要做的是将功能定义为客户端上的资源。 然后,我通过电话删除该功能。 我不喜欢这种解决方案的原因是我在编辑联系人时这样做,但是功能被立即删除。 我想我将不得不推迟呼叫,直到用户保存联系人为止。有关更多信息,在客户端,我正在使用js-data,这是一个很好的库来管理数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM