Symfony fullcalendar 按 id 删除事件

Symfony fullcalendar delete event by id

我试图根据他的 ID 删除一个事件,我得到了 ID,但控制器给出了一个错误,因为它需要一个对象并且给出了一个字符串。


模态框的数据在事件点击时被填充。

eventClick: function(info) {
    var eventObj = info.event;      
    //filling data          
        $('#ev_title').html(eventObj.title);    
        $('#ev_start').html('<b>Fecha inicio: </b> ' + eventObj.start);
        $('#ev_end').html('<b>Fecha fin: </b> ' + eventObj.end);
        $('#ev_desc').html('<b>Descripcion: </b>' + 
        eventObj.extendedProps.description);
        $('#ev_mail').html('<b>Correo destino: </b> ' + 
        eventObj.extendedProps.mail);
        $('#ev_id').html(eventObj.id);},

一个按钮重定向到删除功能。

<div id="myModal" class="modal fade" style="z-index: 9999;">
<div class="modal-dialog">
    <div class="modal-content">
         <div class="modal-header">         

            <h4 id="ev_title" class="modal-title"></h4> 
        --> <h4 id="ev_id" class="modal-title"></h4> 

        </div>
        <!-- dialog body -->
        <div class="modal-body">                

        <p id="ev_start" class="modal-body"></p>
        <p id="ev_end" class="modal-body"></p>
        <p id="ev_mail" class="modal-body"></p>
        <p id="ev_desc" class="modal-body"></p>            

        </div>
        <!-- dialog buttons -->
        <div class="modal-footer">
        <button type="button" data-dismiss="modal" class="btn btn-primary">Cerrar</button>
        <button type="button" class="btn btn-danger" onclick="borrar()">Borrar evento</button>      
        </div>          
    </div>
</div>


function borrar(){              
            var data = $('#ev_id').html();              

    $.ajax({                
        type: "POST",           
        data: { id: data },
        url: "{{ path('borrar') }}", 

    function(response){ 
    if(response.code === 200 && response.success){ alert('success!'); } 
    else{ alert('something broken');}},

        success: function(data) 
        {
            console.log(data);
            alert('OK');
        } 
    });         
}

XHR POST ID


控制器:

public function deleteAction(Request $request){ 

$em = $this->getDoctrine()->getManager();

$data = $request->request->get('id');

$em->remove($data);
$em->flush();

这是错误信息:

EntityManager#remove() expects parameter 1 to be an entity object, string given

您应该从 id 中检索对象并删除该对象。 $object = $em->getDoctrine()->getRepository(Entity::class)->find($request->get("id") 然后像你一样删除 $object : $em->remove($object); $em->flush();

提示:如果您使用 Symfony >=3.4 和默认服务配置,您可以在函数的参数中注入 EntityManagerInterface $em, ClassRepository $repo

public function deleteAction(Request $request, EntityManagerInterface $em, ClassRepository $repo){ 
$object = $repo->find($request->get('id');
$em->remove($object);
$em->flush();

实际上有很多方法可以实现,但最好和最简单的做法是将 id 嵌入 url 中,如下所示:

/**
 * @Route("/delete/{id}")
 */

然后使用 Symfony 的 ParamConverter 来获取这样的对象:

/**
 * @Route("/delete/{id}")
 */
public function deleteAction(YourClass $yourClassObject, EntityManagerInterface $em)
{
    $em->remove($object);
    $em->flush();
}