2017-09-19 1 views
0

Ich habe ein Problem mit Fullcalendar auf Laravel-Framework.Fullcalendar Ereignis von Laravel Abfrage Json nicht angezeigt

Mein Code sieht wie folgt aus:

Scripts Ereignis zu rufen, wenn fullcalendar Lasten:

eventSources: 
[ 
    { 
    type:'POST', 
    url: '/hotel/public/api/checkFullCalendar', 
    dataType: 'json', 
    data: {     
     "_token": "{{ csrf_token() }}" 
    }      
    } 
] 

Das ist mein Controller ist:

public function checkFullCalendar(Request $request) { 

    $today = Carbon::now()->format('Y-m-d'); 
    $reservation = Reservation::where('checkin','>=', Carbon::now()->startOfMonth())->get(); 

    $events = array(); 

    foreach ($reservation as $reser) { 
     $e = array(); 
     $e['id'] = $reser->id; 
     $e['title'] = "Test"; 
     $e['start'] = $reser->checkin; 
     $e['end'] = $reser->checkout; 

     array_push($events, $e); 
    } 

    return response()->json(['events' , $events]); 
} 

Dies ist der Ausgang:

["events",[{"id":1,"title":"Test","start":"2017-09-01","end":"2017-09-02"},{"id":2,"title":"Test","start":"2017-09-01","end":"2017-09-02"},{"id":3,"title":"Test","start":"2017-09-01","end":"2017-09-03"}]] 

und wirft es keine Fehler und keine Veranstaltung Show auf dem Kalender, .. aber, , wenn ich, wie dies für nur 1 Datensatz meiner Anfrage ändern ist Arbeit

public function checkFullCalendar(Request $request) { 

    $today = Carbon::now()->format('Y-m-d'); 
    $reservation = Reservation::where('checkin','>=', Carbon::now()->startOfMonth())->first(); 

    $events = array(); 

    $events['id'] = $reservation->id; 
    $events['title'] = "Test"; 
    $events['start'] = $reservation->checkin; 
    $events['end'] = $reservation->checkout; 


    return response()->json(['events' , $events]); 
} 

es perfekt funktionieren (Ausgang unten) wenn ich nur 1 record habe ich denke, ich muss die array output falsch formatieren, was ich hier fehlt? danke

["events",{"id":1,"title":"Test","start":"2017-09-01"}] 

Antwort

0

Ihre Ausgabe nur ein einzelnes Array so sein muss:

Runde es
[ 
    {"id":1,"title":"Test","start":"2017-09-01","end":"2017-09-02"} 
    {"id":2,"title":"Test","start":"2017-09-01","end":"2017-09-02"} 
    {"id":3,"title":"Test","start":"2017-09-01","end":"2017-09-03"} 
] 

ohne das äußere Array. fullCalendar sucht nach Ereignisobjekten im Stamm des äußeren Arrays. Es denkt, dass die gesamte Antwort das Ereignisarray ist, es erwartet nicht, dass es in einem willkürlichen Element eines äußeren Arrays suchen muss.

Ich weiß Laravel nicht, aber ich würde denken, dass das richtige Ergebnis erzeugen würde

return response()->json($events); 

in Ihrem Controller zu schreiben.

P.S. Der Grund, warum es mit einem Ereignis arbeitet, ist nur Glück - Sie haben ein einzelnes Array, es durchläuft sie und ignoriert wahrscheinlich das erste Element (die Zeichenfolge "events"), da es kein gültiges Ereignisobjekt ist und dann zur Anzeige gelangt das zweite Element, weil es gültig ist. Wenn das zweite Element auch ein Array ist, weiß es nicht, was zu tun ist - es hat Event-Objekte direkt erwartet, nicht in einem Sub-Array.

+0

danke, die Änderung in Antwort tun den Trick – Wolfcain

+0

Kein Problem. Wenn die Antwort Ihnen geholfen hat, denken Sie bitte daran, sie zu aktualisieren und/oder als akzeptierte Antwort zu markieren - danke :-) – ADyson

Verwandte Themen