【问题标题】:FullCalendar get events from databaseFullCalendar 从数据库中获取事件
【发布时间】:2019-09-18 18:32:33
【问题描述】:

您好,我在 laravel 项目中使用 FullCalendar,我需要显示数据库中的事件。

我从数据库中获取所有事件并使用 json_encode 显示它们。

有我使用的代码:

我的控制器:


<?php

namespace App\Http\Controllers;
use App\Http\Gestionnaires\EventGestionnaire;
use Illuminate\Http\Request;

class EventController extends Controller
{
    public function afficher(){

        $eventGestionnaire = new EventGestionnaire;
        $listeEvents = $eventGestionnaire->getListeEvents();

        echo json_encode($listeEvents);


        return view('pages.calendar');

    }
}

还有我的脚本:


$calendar.fullCalendar({

    viewRender: function(view, element) {
        if (view.name != 'month'){

            $(element).find('.fc-scroller').perfectScrollbar();

        }
    },

    resourceEditable: true,
    eventLimit: true,
    editable: true,
    selectable: true,
    selectHelper: true,
    header: {
        left: 'month,agendaWeek,agendaDay',
        center: 'title',
        right: 'prev,next,today'
    },

    events: 'EventController.php',

错误:

jquery.min.js:3049 GET http://localhost/planner/public/EventController.php?start=2019-09-01&end=2019-10-13&_=1568831263931 404(未找到)

【问题讨论】:

  • 我不具体了解 laravel,但对我来说,在 MVC 上下文中,这看起来是错误的:echo json_encode($listeEvents); return view('pages.calendar');。同时返回 JSON 和 视图(即一些 HTML)对于 fullCalendar 没有多大意义。如果您只想返回事件 JSON,则创建一个仅执行此操作的控制器函数,并留下一个单独的函数来显示包含日历本身的视图
  • 另外我很确定在 laravel 中你不会像“eventController.php”那样调用控制器——这又是没有意义的,它怎么知道你想在控制器?我认为您可能需要学习 laravel 教程和/或阅读官方文档,并确保您了解 conteollers 以及操作和路由的基础知识,以便设置正确的 URL。就像我说的那样,我不太了解该框架,但我知道的足够多,可以看出您使用它的方式不是正确的

标签: javascript php laravel fullcalendar


【解决方案1】:

我过去使用过它,并且在它的 javascript 端使用与先前答案所示相同的结构。一旦创建了访问它的路由,请参阅响应您的 ajax 请求的 php 代码:

    $results = [];

    foreach($calendar_events as $calendar_event)
    {
        $ev = [];
        $ev["title"] = $calendar_event->name;
        $ev["color"] = $calendar_event->calendar->color ?? "f47d30";

        $ev["start"] = Carbon::parse($calendar_event->start)->format("Y-m-d");
        $ev["end"]   = Carbon::parse($calendar_event->end)->format("Y-m-d");

        if (!$calendar_event->is_allday)
        {
            $ev["start"]  = Carbon::parse($calendar_event->start."T".$calendar_event->start_time)->format("Y-m-d\TH:i:s");
            $ev["end"]    = Carbon::parse($calendar_event->end."T".$calendar_event->end_time)->format("Y-m-d\TH:i:s");
            $ev["allDay"] = false;
        }

        if (!empty($calendar_event->url))
        {
            $ev["url"] = $calendar_event->url;
        }

        $results[] = $ev;
    }

    return response($results);

【讨论】:

  • 我使用了你的结构和脚本结构,但没有任何改变。
  • 但是当我将完整路径放在 eventSources 中时,我没有错误 404 但致命错误:未捕获的错误:在 C:\xampp\ 中找不到类 'App\Http\Controllers\Controller' htdocs\planner\app\Http\Controllers\GetEvent.php:8 堆栈跟踪:#0 {main} 在第 8 行的 C:\xampp\htdocs\planner\app\Http\Controllers\GetEvent.php 中抛出
【解决方案2】:

从 FullCallendar V3 DOCS 使用 JSON 响应传递 URL

$('#calendar').fullCalendar({

  eventSources: [

    // your event source
    {
      url: '/myfeed.php', // use the `url` property
      color: 'yellow',    // an option!
      textColor: 'black'  // an option!
    }

    // any other sources...

  ]

});

【讨论】:

  • 我仍然有与 eventSources 相同的错误,并且时间戳很好,因为当我粘贴事件时,我的数据库返回的所有事件都显示在日历上
  • 也许您的 PHP 检测到这是一个 ajax 调用,然后出于安全或其他原因返回 HTTP 404。你能做一个简单的 ajax 调用并在控制台上登录你的 URL 的响应吗?喜欢: if((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')) { http_response_code(404); }
  • "我认为 "events" 选项适用于数组" ...它可以与数组、URL、函数或事件源对象一起使用。文档描述了所有这些选项
  • 附言。出于安全原因,不会返回 404。 404 表示未找到。 403 或 401 是安全错误
  • 您链接到的那篇文章违反了通用约定和 w3c 规范 (w3.org/Protocols/rfc2616/rfc2616-sec10.html),并可能通过向普通用户和恶意用户提供有关问题。此外,它基本上是通过默默无闻来倡导安全,这并不是真正的安全解决方案。如果您的安全设置正确,那么这种技术应该是不必要或不可取的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
相关资源
最近更新 更多