2017-09-05 71 views
0

我不知道如何更新或刪除我的symfony項目上的fullcalendar事件。如何使用Symfony更新或刪除fullCalendar事件

要添加新事件,我打開一個窗體的模態窗口提交新事件並將其插入到我的數據庫中。

這是我CONTROLER(它工作正常):

$datas = array(); 
    $form = $this->createFormBuilder($datas) 
     ->add('title', TextType::class) 
     ->add('startDate', TextType::class, array(
      'attr'=> array('class' => 'dateTimePicker'))) 
     ->add('endDate', TextType::class, array(
      'attr'=> array('class' => 'dateTimePicker'))) 
     ->add('backgroundColor', ChoiceType::class, array('choices' => $color)) 

     ->getForm(); 

    $form->handleRequest($request); 

    /** Création d'un nouvel évenement */ 
    if ($form->isSubmitted() && $form->isValid()) { 

     $title = $form->get('title')->getData(); 
     $start = new \DateTime($form->get('startDate')->getData()); 
     $end = new \DateTime($form->get('endDate')->getData()); 
     $backgroundColor = $form->get('backgroundColor')->getData(); 

     $event = new CalendarEvent(); 
     $event->setTitle($title); 
     $event->setStartDate($start); 
     $event->setEndDate($end); 
     $event->setBackgroundColor($backgroundColor); 

     $em = $this->getDoctrine()->getManager(); 
     $em->persist($event); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('ma_lrm_accueil')); 
    } 

我知道,更新的事件,我必須有這樣一個javascript:

$(document).ready(function() { 
$('#calendar').fullCalendar({ 
    header: { 
     left: 'prev, next', 
     center: 'title', 
     right: 'month, agendaWeek, agendaDay' 
    }, 
    timezone: ('Europe/London'), 
    businessHours: { 
     start: '09:00', 
     end: '18:30', 
     dow: [1, 2, 3, 4, 5] 
    }, 
    allDaySlot: true, 
    defaultView: 'agendaWeek', 
    lazyFetching: true, 
    firstDay: 1, 
    selectable: true, 
    /*timeFormat: { 
     agenda: 'h:mmt', 
     '': 'h:mmt' 
    },*/ 
    editable: true, 
    eventDurationEditable: true, 
    events: 'http://localhost/ligne_rh/web/app_dev.php/admin/accueil/calendar', 

    eventResize: function(events) { 
     console.log("Entrée dans : eventResize"); 
     var start1 = events.start.format('Y-m-d\TH:i:s'); 
     var end1 = events.end.format('Y-m-d\TH:i:s'); 
     var xhr = $.ajax({ 
      type: "POST", 
      url: 'http://localhost/.../calendar/event/update', 
      data: 'title=' + events.title + '&start=' + start1 + '&end=' + end1 + '&id=' + events.id, 
      dataType: 'html', 
      success: function(data) { 
       window.location.reload(true); 
      }, 
      error: function() { 
       alert("..."); 
      }, 
     }); 
    }, 

}); 

我不明白它的任何我不知道我的控制器應該是什麼樣子。

請幫助我一個例子!我是新手!謝謝!!!!

+0

你真的想要什麼?出現一些錯誤? –

+0

我不知道我的updateAction應該如何?它應該返回JSON和如何?我不明白我的js和我的動作控制器之間的聯繫 – Moh

回答

0

您應該使用

$em->merge($event); 

用於更新現有實體和

$em->remove($event); 

去除實體。

也許你應該嘗試創建不同的控制器動作(eventDeleteAction,eventCreateAction)來進行CRUD操作。

+0

剛剛意識到它並不是非常有用,因爲你完全不熟悉編程,並且很可能此代碼是由其他人編寫的。我相信你應該從以下文章和https://symfony.com/doc/current/forms.html,https://symfony.com/doc/current/doctrine.html, https://blog.intelligentbee開始。 com/2015/01/19/symfony-2-forms-and-ajax /如果你至少可以運行這些代碼並熟悉基本的編程術語,比如條件語句,循環語句等等。如果您在處理過程中遇到任何問題,我可以幫助您使用其他控制器代碼。希望這會有所幫助! –

+0

好的,謝謝!確切地說,我不知道我的行爲應該如何與我的JavaScript鏈接? – Moh

+0

首先,您應該在HTML中定義一些控件來管理插入和刪除(當然,如果這個操作應該由用戶手動完成)。然後,添加一些onClick處理程序來發出AJAX請求,如果您想要異步執行它。您應該指定在您的ajax調用中觸發您的控制器以使您的控制器運行的URL。我相信你可以成功谷歌每一個單詞,並獲得更多關於html控件,Javascript事件和ajax的詳細解釋。你也需要一些routing.yml的幫助。 –