Laravel 10 Ajax FullCalendar Tutorial with Example

20-Apr-2023

.

Admin

Laravel 10 Ajax FullCalendar Tutorial with Example

Hi all,

Today, I explain Laravel 10 Ajax full calendar tutorial with examples. I will show you, how you can integrate a full calendar into Laravel 10 application. I have written step-by-step instructions for Laravel 10 FullCalendar Ajax.

This comprehensive guide, step by step, explains how to add and integrate FullCalendar in Laravel not only but also how to use FullCalendar in the Laravel 10 application.

Step 1: Download Laravel


Let us begin the tutorial by installing a new Laravel application. if you have already created the project, then skip the following step.

composer create-project laravel/laravel example-app

Step 2: Add Migration and Model

In this step create migration and model for events table, fire this command:

php artisan make:model Events -m

After this command you will find one file in the following path "database/migrations" and you have to put the below code in your migration file to create an events table.

Database/Migrations/create_events_table.php

<?php

use Illuminate\Database\Migrations\Migration;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Support\Facades\Schema;

return new class extends Migration

{

/**

* Run the migrations.

*

* @return void

*/

public function up()

{

Schema::create('events', function (Blueprint $table) {

$table->id();

$table->string('title');

$table->date('start');

$table->date('end');

$table->timestamps();

});

}

/**

* Reverse the migrations.

*

* @return void

*/

public function down()

{

Schema::dropIfExists('events');

}

};

Then after, run the migration:

php artisan migrate

Now that you have created the event model, type your code into it. Copy the following model to write the code. This code you put in your Event.php model.

app/Models/Events.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Events extends Model

{

use HasFactory;

/**

* The attributes that are mass assignable.

*

* @var array

*/

protected $fillable = [

'title', 'start', 'end'

];

}

Step 3: Add Controller

Now require to create new FullCalenderController for index and ajax method so first run bellow command:

php artisan make:controller FullCalenderController

After this command you can find FullCalenderController.php file in your app/Http/Controllers directory. open the FullCalenderController.php file and put the below code in that file.

app/Http/Controllers/FullCalenderController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Events;

class FullCalenderController extends Controller

{

/**

* Write code on Method

*

* @return response()

*/

public function index(Request $request)

{

if($request->ajax()) {

$data = Event::whereDate('start', '>=', $request->start)

->whereDate('end', '<=', $request->end)

->get(['id', 'title', 'start', 'end']);

return response()->json($data);

}

return view('fullcalender');

}

/**

* Write code on Method

*

* @return response()

*/

public function ajax(Request $request)

{

switch ($request->type) {

case 'add':

$event = Event::create([

'title' => $request->title,

'start' => $request->start,

'end' => $request->end,

]);

return response()->json($event);

break;

case 'update':

$event = Event::find($request->id)->update([

'title' => $request->title,

'start' => $request->start,

'end' => $request->end,

]);

return response()->json($event);

break;

case 'delete':

$event = Event::find($request->id)->delete();

return response()->json($event);

break;

default:

# code...

break;

}

}

}

Step 4: Add Routes

In this step we will add routes and controller files so first add the below route in your routes.php file.

routes/web.php

<?php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\FullCalenderController;

/*

|--------------------------------------------------------------------------

| Web Routes

|--------------------------------------------------------------------------

|

| Here is where you can register web routes for your application. These

| routes are loaded by the RouteServiceProvider within a group which

| contains the "web" middleware group. Now create something great!

|

*/

Route::controller(FullCalenderController::class)->group(function(){

Route::get('fullcalender', 'index');

Route::post('fullcalenderAjax', 'ajax');

});

Step 5: Add Blade File

Ok, in this last step we will create a fullcalender.blade.php file to display a full calendar and we will write js code for the crud app. So first create fullcalender.blade.php file and put bellow code:

resources/views/fullcalender.blade.php

<!DOCTYPE html>

<html>

<head>

<title>Laravel 10 Ajax FullCalendar Tutorial with Example - Nicesnippets.com</title>

<meta name="csrf-token" content="{{ csrf_token() }}">

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.css" />

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css" />

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>

</head>

<body>

<div class="container text-center">

<h2 class="m-5">Laravel 10 Ajax FullCalendar Tutorial with Example - Nicesnippets.com</h2>

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

</div>

<script type="text/javascript">

$(document).ready(function () {

/*------------------------------------------

--------------------------------------------

Get Site URL

--------------------------------------------

--------------------------------------------*/

var SITEURL = "{{ url('/') }}";

/*------------------------------------------

--------------------------------------------

CSRF Token Setup

--------------------------------------------

--------------------------------------------*/

$.ajaxSetup({

headers: {

'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

}

});

/*------------------------------------------

--------------------------------------------

FullCalender JS Code

--------------------------------------------

--------------------------------------------*/

var calendar = $('#calendar').fullCalendar({

editable: true,

events: SITEURL + "/fullcalender",

displayEventTime: false,

editable: true,

eventRender: function (event, element, view) {

if (event.allDay === 'true') {

event.allDay = true;

} else {

event.allDay = false;

}

},

selectable: true,

selectHelper: true,

select: function (start, end, allDay) {

var title = prompt('Event Title:');

if (title) {

var start = $.fullCalendar.formatDate(start, "Y-MM-DD");

var end = $.fullCalendar.formatDate(end, "Y-MM-DD");

$.ajax({

url: SITEURL + "/fullcalenderAjax",

data: {

title: title,

start: start,

end: end,

type: 'add'

},

type: "POST",

success: function (data) {

displayMessage("Event Created Successfully");

calendar.fullCalendar('renderEvent',

{

id: data.id,

title: title,

start: start,

end: end,

allDay: allDay

},true);

calendar.fullCalendar('unselect');

}

});

}

},

eventDrop: function (event, delta) {

var start = $.fullCalendar.formatDate(event.start, "Y-MM-DD");

var end = $.fullCalendar.formatDate(event.end, "Y-MM-DD");

$.ajax({

url: SITEURL + '/fullcalenderAjax',

data: {

title: event.title,

start: start,

end: end,

id: event.id,

type: 'update'

},

type: "POST",

success: function (response) {

displayMessage("Event Updated Successfully");

}

});

},

eventClick: function (event) {

var deleteMsg = confirm("Do you really want to delete?");

if (deleteMsg) {

$.ajax({

type: "POST",

url: SITEURL + '/fullcalenderAjax',

data: {

id: event.id,

type: 'delete'

},

success: function (response) {

calendar.fullCalendar('removeEvents', event.id);

displayMessage("Event Deleted Successfully");

}

});

}

}

});

});

/*------------------------------------------

--------------------------------------------

Toastr Success Code

--------------------------------------------

--------------------------------------------*/

function displayMessage(message) {

toastr.success(message, 'Event');

}

</script>

</body>

</html>

Run Laravel App:

All steps have been done, now you have to type the given command and hit enter to run the Laravel app:

php artisan serve

Now, you have to open the web browser, type the given URL and view the app output:

http://localhost:8000/fullcalender

I think you must have liked this example.....

#Laravel 10