yii2 передача данных в календарь

#php #mysql #model-view-controller #yii2

Вопрос:

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

Вот мой контроллер:

 public function actionEvents() {
    $data = [];

    $data[] = array(
        'title' => 'Repeating Event',
        'start' =>  '2021-10-07T16:00:00', //strtotime('2021-10-07'),
        'description' => 'Lorem ipsum dolor sit ncididunt ut labore',
        'end' => '2021-10-08T16:00:00', //strtotime('2021-10-08'), 
        'className' => "fc-event-danger"
    );

    $response = Yii::$app->response;
    $response->format = yiiwebResponse::FORMAT_JSON;
    return [
        'data' => $data,
    ];
}
 

Вот мой сценарий календаря:

 var KTCalendarBasic = function() {
    
        return {
            //main function to initiate the module
            init: function() {
    
                var calendarEvents = window.location.href   '/events';
    
                var todayDate = moment().startOf('day');
                var TODAY = todayDate.format('YYYY-MM-DD');
    
                var calendarEl = document.getElementById('kt_calendar');
                var calendar = new FullCalendar.Calendar(calendarEl, {
                    plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
    
                    isRTL: KTUtil.isRTL(),
                    header: {
                        left: 'prev,next today',
                        center: 'title',
                        right: 'dayGridMonth,timeGridWeek,timeGridDay'
                    },
    
                    height: 800,
                    contentHeight: 780,
                    aspectRatio: 3,
    
                    nowIndicator: true,
                    now: TODAY   'T09:25:00', // just for demo
    
                    views: {
                        dayGridMonth: { buttonText: 'month' },
                        timeGridWeek: { buttonText: 'week' },
                        timeGridDay: { buttonText: 'day' }
                    },
    
                    defaultView: 'dayGridMonth',
                    defaultDate: TODAY,
    
                    editable: true,
                    eventLimit: true, // allow "more" link when too many events
                    navLinks: true,
                    events: calendarEvents,
    
                    eventRender: function(info) {
                        var element = $(info.el);
    
                        if (info.event.extendedProps amp;amp; info.event.extendedProps.description) {
                            if (element.hasClass('fc-day-grid-event')) {
                                element.data('content', info.event.extendedProps.description);
                                element.data('placement', 'top');
                            } else if (element.hasClass('fc-time-grid-event')) {
                                element.find('.fc-title').append('<div class="fc-description">'   info.event.extendedProps.description   '</div>'); 
                            } else if (element.find('.fc-list-item-title').lenght !== 0) {
                                element.find('.fc-list-item-title').append('<div class="fc-description">'   info.event.extendedProps.description   '</div>'); 
                            }
                        } 
                    }
                });
    
                calendar.render();
            }
        };
        }();
    
jQuery(document).ready(function() {
    KTCalendarBasic.init();
});
 

С этими кодами я все еще не могу видеть события в своем календаре.

Ответ №1:

Преобразование в JSON-это то, где я допустил ошибку

существующий:

 $response = Yii::$app->response;
$response->format = yiiwebResponse::FORMAT_JSON;
return [
    'data' => $data,
];
 

должно быть:

 $response = Yii::$app->response;
$response->format = yiiwebResponse::FORMAT_JSON;
return $data;
 

просто верните саму переменную, не присваивая ее новой переменной. Потому что это повлияет на то, когда я отобразю его в своем календаре.

Комментарии:

1. Просто return $this->asJson($data); сохраню ваши две строки кода. 🙂