简体   繁体   中英

Events don't show in full calendar in laravel

Please i need help , im working on open source project in laravel ,this is a booking room system , every thing working well but there is somthing in the full calendar script where i cant see the event that i have created , but when i vew source page i see the event correctly but its not show in calendar

this is the booking index page with script code for full calendar:

@inject('request', 'Illuminate\Http\Request')
@extends('layouts.app')

@section('content')
    <h3 class="page-title">@lang('quickadmin.bookings.title')</h3>
    @can('booking_create')
    <p>
        <a href="{{ route('admin.bookings.create') }}" class="btn btn-success">@lang('quickadmin.qa_add_new')</a>

    </p>
    @endcan
         <link href='//fonts.googleapis.com/css?family=Lato:100,400,700' rel='stylesheet' />
        <link href='https://fullcalendar.io/css/base.css?3.5.1-1.7.1-1' rel='stylesheet' />
        <link rel='stylesheet' href='https://fullcalendar.io/js/fullcalendar-3.5.1/fullcalendar.min.css' />


    <div id='calendar'></div>

@stop

@section('javascript') 
  <script src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js'></script>
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
    <script src='https://fullcalendar.io/js/fullcalendar-3.5.1/fullcalendar.min.js'></script>
    <script src='https://fullcalendar.io/js/home.js?3.5.1-1.7.1-1'></script>

    <script>
       $(document).ready(function(){
        $('#calendar').fullcalendar({
            defaultView: 'agendaWeek',
           editable: true,
           events:[
                @foreach($bookings as $booking)
                {
                    title:'{{$booking->room->name.' '.$booking->room->notes}}',    
                    start:'{{$booking->date.' '.$booking->start_time}}',
                    finish:'{{$booking->date.' '.$booking->finish_time}}',
                    url :'{{route('admin.bookings.edit',$booking->id)}}'    
                },
                @endforeach
                ] 
        })
     });

    </script>
@endsection

this is the Booking Controller :

<?php

namespace App\Http\Controllers\Admin;

use App\Booking;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\StoreBookingsRequest;
use App\Http\Requests\Admin\UpdateBookingsRequest;

class BookingsController extends Controller
{
    /**
     * Display a listing of Booking.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        if (! Gate::allows('booking_access')) {
            return abort(401);
        }


        if (request('show_deleted') == 1) {
            if (! Gate::allows('booking_delete')) {
                return abort(401);
            }
            $bookings = Booking::onlyTrashed()->get();
        } else {
            $bookings = Booking::all();
        }

        return view('admin.bookings.index', compact('bookings'));
    }

    /**
     * Show the form for creating new Booking.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        if (! Gate::allows('booking_create')) {
            return abort(401);
        }

        $rooms = \App\Room::get()->pluck('name', 'id')->prepend(trans('quickadmin.qa_please_select'), '');

        return view('admin.bookings.create', compact('rooms'));
    }

    /**
     * Store a newly created Booking in storage.
     *
     * @param  \App\Http\Requests\StoreBookingsRequest  $request
     * @return \Illuminate\Http\Response
     */
    public function store(StoreBookingsRequest $request)
    {
        if (! Gate::allows('booking_create')) {
            return abort(401);
        }
        $booking = Booking::create($request->all());



        return redirect()->route('admin.bookings.index');
    }


    /**
     * Show the form for editing Booking.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        if (! Gate::allows('booking_edit')) {
            return abort(401);
        }

        $rooms = \App\Room::get()->pluck('name', 'id')->prepend(trans('quickadmin.qa_please_select'), '');

        $booking = Booking::findOrFail($id);

        return view('admin.bookings.edit', compact('booking', 'rooms'));
    }

    /**
     * Update Booking in storage.
     *
     * @param  \App\Http\Requests\UpdateBookingsRequest  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(UpdateBookingsRequest $request, $id)
    {
        if (! Gate::allows('booking_edit')) {
            return abort(401);
        }
        $booking = Booking::findOrFail($id);
        $booking->update($request->all());



        return redirect()->route('admin.bookings.index');
    }


    /**
     * Display Booking.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        if (! Gate::allows('booking_view')) {
            return abort(401);
        }
        $booking = Booking::findOrFail($id);

        return view('admin.bookings.show', compact('booking'));
    }


    /**
     * Remove Booking from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        if (! Gate::allows('booking_delete')) {
            return abort(401);
        }
        $booking = Booking::findOrFail($id);
        $booking->delete();

        return redirect()->route('admin.bookings.index');
    }

    /**
     * Delete all selected Booking at once.
     *
     * @param Request $request
     */
    public function massDestroy(Request $request)
    {
        if (! Gate::allows('booking_delete')) {
            return abort(401);
        }
        if ($request->input('ids')) {
            $entries = Booking::whereIn('id', $request->input('ids'))->get();

            foreach ($entries as $entry) {
                $entry->delete();
            }
        }
    }


    /**
     * Restore Booking from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function restore($id)
    {
        if (! Gate::allows('booking_delete')) {
            return abort(401);
        }
        $booking = Booking::onlyTrashed()->findOrFail($id);
        $booking->restore();

        return redirect()->route('admin.bookings.index');
    }

    /**
     * Permanently delete Booking from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function perma_del($id)
    {
        if (! Gate::allows('booking_delete')) {
            return abort(401);
        }
        $booking = Booking::onlyTrashed()->findOrFail($id);
        $booking->forceDelete();

        return redirect()->route('admin.bookings.index');
    }
}

this is the Booking Model :

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\SoftDeletes;

/**
 * Class Booking
 *
 * @package App
 * @property string $room
 * @property string $booking_name
 * @property string $start_time
 * @property string $finish_time
 * @property string $phone
 * @property string $email
 * @property string $notes
*/
class Booking extends Model
{
    use SoftDeletes;

    protected $fillable = ['booking_name', 'start_time', 'finish_time', 'phone', 'email', 'notes', 'room_id'];


    /**
     * Set to null if empty
     * @param $input
     */
    public function setRoomIdAttribute($input)
    {
        $this->attributes['room_id'] = $input ? $input : null;
    }

    /**
     * Set attribute to date format
     * @param $input
     */
    public function setStartTimeAttribute($input)
    {
        if ($input != null && $input != '') {
            $this->attributes['start_time'] = Carbon::createFromFormat(config('app.date_format') . ' H:i:s', $input)->format('Y-m-d H:i:s');
        } else {
            $this->attributes['start_time'] = null;
        }
    }

    /**
     * Get attribute from date format
     * @param $input
     *
     * @return string
     */
    public function getStartTimeAttribute($input)
    {
        $zeroDate = str_replace(['Y', 'm', 'd'], ['0000', '00', '00'], config('app.date_format') . ' H:i:s');

        if ($input != $zeroDate && $input != null) {
            return Carbon::createFromFormat('Y-m-d H:i:s', $input)->format(config('app.date_format') . ' H:i:s');
        } else {
            return '';
        }
    }

    /**
     * Set attribute to date format
     * @param $input
     */
    public function setFinishTimeAttribute($input)
    {
        if ($input != null && $input != '') {
            $this->attributes['finish_time'] = Carbon::createFromFormat(config('app.date_format') . ' H:i:s', $input)->format('Y-m-d H:i:s');
        } else {
            $this->attributes['finish_time'] = null;
        }
    }

    /**
     * Get attribute from date format
     * @param $input
     *
     * @return string
     */
    public function getFinishTimeAttribute($input)
    {
        $zeroDate = str_replace(['Y', 'm', 'd'], ['0000', '00', '00'], config('app.date_format') . ' H:i:s');

        if ($input != $zeroDate && $input != null) {
            return Carbon::createFromFormat('Y-m-d H:i:s', $input)->format(config('app.date_format') . ' H:i:s');
        } else {
            return '';
        }
    }

    public function room()
    {
        return $this->belongsTo(Room::class, 'room_id')->withTrashed();
    }

}

this is the route of booking:

Route::resource('bookings', 'Admin\BookingsController');
    Route::post('bookings_mass_destroy', ['uses' => 'Admin\BookingsController@massDestroy', 'as' => 'bookings.mass_destroy']);
    Route::post('bookings_restore/{id}', ['uses' => 'Admin\BookingsController@restore', 'as' => 'bookings.restore']);
    Route::delete('bookings_perma_del/{id}', ['uses' => 'Admin\BookingsController@perma_del', 'as' => 'bookings.perma_del']);

UPDATED

and this is the result that i show when view page source:

 <script>
       $(document).ready(function(){
        $('#calendar').fullcalendar({
            defaultView: 'agendaWeek',
           events:[
                                {
                    title:'room one hy',    
                    start:' 15-09-2017 06:00:00',
                    finish:' 16-09-2017 09:00:00',
                    url :'http://127.0.0.1:8000/admin/bookings/5/edit'    
                },
                                {
                    title:'room one hy',    
                    start:' 13-09-2017 07:00:00',
                    finish:' 13-09-2017 10:00:00',
                    url :'http://127.0.0.1:8000/admin/bookings/6/edit'    
                },
                                {
                    title:'room one hy',    
                    start:' 27-09-2017 07:11:00',
                    finish:' 29-09-2017 09:13:00',
                    url :'http://127.0.0.1:8000/admin/bookings/7/edit'    
                },
                                {
                    title:'room one hy',    
                    start:' 27-09-2017 07:00:00',
                    finish:' 30-09-2017 08:00:00',
                    url :'http://127.0.0.1:8000/admin/bookings/8/edit'    
                },
                                {
                    title:'room one hy',    
                    start:' 04-10-2017 04:00:00',
                    finish:' 04-10-2017 09:00:00',
                    url :'http://127.0.0.1:8000/admin/bookings/9/edit'    
                },
                                ] 
        })
     });

For starters, as per documentation , the end time of an event is defined per end property.

Also, I am not sure if your line of '{{$booking->date.' '.$booking->start_time}}' '{{$booking->date.' '.$booking->start_time}}' would not give you something formatted like 'Ymd Ymd H:i:s' (as you are already returning a full datetime string from you start_time and finish_time attributes).

At last, your line of $zeroDate = str_replace(['Y', 'm', 'd'], ['0000', '00', '00'], config('app.date_format') . ' H:i:s'); does not seem to have great purpose. I see what you are trying to go for here, but this line will only give you something like '0000-00-00 H:i:s' and I doubt that this is what you want when checking for an empty date value (instead you should use nullable on that database field and check for that in your getMutator ).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM