Удаление дочерней коллекции с помощью FOSRestBundle в Symfony2

0

Я использую 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",
        }
    }]
}
Теги:
rest

1 ответ

0

Наконец, я решил определить параметры в качестве ресурса на стороне клиента. Затем я удаляю передачу с помощью вызова. Что мне не нравится в этом решении, так это то, что я делаю это во время редактирования контакта, но его удаление сразу удаляется. Я думаю, мне придется отложить вызов до тех пор, пока пользователь не сохранит контакт... Для получения дополнительной информации на стороне клиента я использую js-данные, которые являются отличной библиотекой для управления данными.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню