2017-09-05 20 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->remove($event); 

を更新するための

$em->merge($event); 

を使用する必要があります。

CRUD操作を行うために、別のコントローラアクション(eventDeleteAction、eventCreateAction)を作成するようにしてください。

+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内にいくつかのコントロールを定義する必要があります(もちろん、この操作はユーザーが手動で行う必要があります)。その後、非同期にしたい場合は、AJAXリクエストを行うためにonClickハンドラをいくつか追加します。コントローラーを起動させるには、ajax呼び出しの中でコントローラーをトリガーするurlを指定する必要があります。私はあなたが正常にGoogleの各単語を成功させることができ、HTMLコントロール、Javascriptイベント、およびajaxの詳細な説明を得ることができます。また、routing.ymlの助けが必要です。 –