#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);
сохраню ваши две строки кода. 🙂