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

时间:2015-07-12 17:24:19

标签: angularjs rest symfony

我使用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",
        }
    }]
}

1 个答案:

答案 0 :(得分:0)

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