首页 > 解决方案 > Laravel 7 Auth / fullcalendar 4 登录导致 JSON Feed 而不是 /home

问题描述

我正在开发一个包含完整日历的小 Laravel 7 后端。我已经在 Laravel 中设置了 auth 例程,还通过 npm 集成了 bootstrap 和 fullcalendar。日历显示在 /home 视图中(登录后)。到目前为止一切正常。我还有一个用于所有日历事件的数据库表,这些事件通过 JSON 提要显示在日历中。

我遇到的问题是,每次登录后,应用程序都不会显示 /home 视图,因为它是在 Laravels auth 例程的每个控制器和中间件中定义的。我没有更改身份验证过程的任何路由或重定向。但是,该应用程序将我直接扔到 JSON 事件提要中,而不是 /home 视图。

这是我的事件控制器:

class EventController extends Controller
{
    /**
     * @var Event
     */
    protected $event;
    protected $calendar;

    /**
     * EventsController constructor.
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->event = new Event();
        $this->calendar = Event::all();
    }

    public function show() {
        return $this->calendar;
    }
}

这就是我的完整日历代码在 app.js 中的样子:

import { Calendar } from '@fullcalendar/core';
import deLocale from '@fullcalendar/core/locales/de';
import dayGridPlugin from '@fullcalendar/daygrid';
import timeGridPlugin from '@fullcalendar/timegrid';
import interactionPlugin from '@fullcalendar/interaction';
import '@fullcalendar/core/main.css';
import '@fullcalendar/daygrid/main.css';
import '@fullcalendar/timegrid/main.css';
//import '@fullcalendar/list/main.css';

document.addEventListener('DOMContentLoaded', function() {
    var calendarEl = document.getElementById('calendar');

    var calendar = new Calendar(calendarEl, {
        plugins: [ timeGridPlugin, dayGridPlugin, interactionPlugin ],
        locale: deLocale,
        defaultView: window.screen.width < 768 ? 'timeGridDay' : 'timeGridWeek',
        height: 700,
        firstDay: 1,
        buttonText: {
            today: 'heute',
            month: 'Monatsansicht',
            week: 'Wochenansicht',
            day: 'Tagesansicht'
        },
        header: {
            left: 'title',
            center: 'prev next today month agendaWeek agendaDay',
            right: 'prevYear nextYear'
        },
        allDayText: 'ganzer Tag',
        minTime: '08:00:00',
        maxTime: '19:00:00',
        selectable: true,
        selectMirror: true,
        defaultAllDayEventDuration: {
            days: 1
        },
        events: '/getEvents'
    });
    calendar.render();
});

这是我的 routes.php 文件:

Route::get('/', 'HomeController@index')->name('index');

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');


Route::post('/kalender', 'EventController@store')->name('event_create');
Route::put('/kalender', 'EventController@edit')->name('event_edit');
Route::get('/getEvents', 'EventController@show');

正如我上面提到的,登录到后端后,我看不到包含日历的 /home 视图。我看到的是事件源('/getEvents')的 URL,事件源的所有参数都作为 GET 参数:

登录后浏览器查看

当我在浏览器中手动键入 /home 时,会正确显示 /home 视图,其中包含来自 DB 的事件。谁能帮我解决这个问题?

标签: javascriptjsonlaravelauthenticationfullcalendar

解决方案


推荐阅读