CodeIgniter 4 FullCalendar Example Tutorial Integrating FullCalendar with events in CodeIgniter 4 is a straightforward process that provides a powerful and responsive calendar system for your application. FullCalendar is an open-source jQuery library that allows you to create, edit, and manage events efficiently. With drag-and-drop functionality and customization options, FullCalendar makes event handling seamless.
Table Of Content
1 Prerequisites
1.) PHP version of >= 8.2
2.) Composer
3.) Mysql
2 Introduction
This guide walks you through an example of creating a CRUD application in CodeIgniter 4 to manage events using FullCalendar. You will set up a database, create a migration, define a model, and implement a controller to handle FullCalendar operations.
3 Create / Install a Codeigniter 4 Project
3.1 Install Codeigniter 4 Project
Install CodeIgniter 4 using Composer:
composer create-project codeigniter4/appstarter ci-4-fullcalendar-app
Then, navigate to your project directory:
cd ci-4-fullcalendar-app
Rename
.env and update the database configuration:
# CI_ENVIRONMENT = production CI_ENVIRONMENT = development
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=ci4_fullcalender DB_USERNAME=root DB_PASSWORD=
4 Create Migration and Model
Generate a migration for the events table and define its structure:
php spark make:model Event
Edit
app/Models/Event.php to configure the model:
<?php namespace App\Models; use CodeIgniter\Model; class Event extends Model { protected $table = 'events'; protected $primaryKey = 'id'; protected $allowedFields = ['title','start','end', 'created_at','updated_at']; }
Update the migration file to include fields for the event table, such as title, start, end, created_at, and updated_at.
php spark make:migration AddEvent
Edit the migration file to define the table structure:
<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; class CreateEventsTable extends Migration { public function up() { $this->forge->addField([ 'id' => [ 'type' => 'BIGINT', 'constraint' => 255, 'unsigned' => true, 'auto_increment' => true ], 'title' => [ 'type' => 'VARCHAR', 'constraint' => '255', ], 'start' => [ 'type' => 'DATE', 'null' => true ], 'end' => [ 'type' => 'DATE', 'null' => true ], 'created_at' => [ 'type' => 'TIMESTAMP', 'null' => true ], 'updated_at' => [ 'type' => 'TIMESTAMP', 'null' => true ], ]); $this->forge->addPrimaryKey('id'); $this->forge->createTable('events'); } public function down() { $this->forge->dropTable('events'); } }
Run the migration:
php spark migrate
5 Create Database Seeder
For seeding test data in the events table, use the Seeder class:
php spark make:seeder EventSeeder
Inside the
EventSeeder.php file, use the Faker library to generate fake data:
<?php namespace App\Database\Seeds; use CodeIgniter\Database\Seeder; use CodeIgniter\I18n\Time; use App\Models\Event; class EventSeeder extends Seeder { public function run() { $event = new Event; $faker = \Faker\Factory::create(); for ($i = 0; $i < 10; $i++) { $start = $faker->dateTimeBetween('next Monday', 'next Monday +7 days'); $end = $faker->dateTimeBetween($start, $start->format('Y-m-d').' +3 days'); $event->save( [ 'title' => $faker->name, 'start' => $start->format('Y-m-d'), 'end' => $end->format('Y-m-d'), 'created_at' => Time::createFromTimestamp($faker->unixTime()), 'updated_at' => Time::now() ] ); } } }
Run this below command to insert the data.
php spark db:seed EventSeeder
6 Create New Controller - FullCalenderController
Create a controller, This will handle operations like adding, updating, and deleting events.
php spark make:controller FullCalenderController
In
app/Controllers/FullCalenderController.php , define the index and ajax function:
<?php namespace App\Controllers; use App\Controllers\BaseController; use CodeIgniter\HTTP\ResponseInterface; use App\Models\Event; class FullCalenderController extends BaseController { public function index() { if(!empty($this->request->getGet('start'))) { $event = new Event(); $data = $event->where('start>=',$this->request->getGet('start'))->where('end<=',$this->request->getGet('end'))->findAll(); return response()->setJSON($data); } return view('fullcalender'); } public function ajax() { $event = new Event(); switch ($this->request->getPost('type')) { case 'add': $data = [ "title" => $this->request->getPost("title"), "start" => $this->request->getPost("start"), "end" => $this->request->getPost("end"), ]; $event_id=$event->insert($data); $eventData=$event->find($event_id); return response()->setJSON($eventData); break; case 'update': $data = [ "title" => $this->request->getPost("title"), "start" => $this->request->getPost("start"), "end" => $this->request->getPost("end"), ]; $event_id= $event->update( $this->request->getPost("id"), $data); $eventData=$event->find($event_id); return response()->setJSON($eventData); break; case 'delete': $eventData = $event->where("id",$this->request->getPost("id"))->delete(); return response()->setJSON($eventData); break; default: # code... break; } } } ?>
7 Create a View
Develop a view file
(index.php) to display the FullCalendar. Include the FullCalendar and jQuery libraries for rendering and interaction.
<!DOCTYPE html> <html> <head> <title>Codeigniter 4 Fullcalender Tutorial Tutorial - GetSampleCode.com</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.css" /> <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> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css" /> </head> <body> <div class="container"> <div class="card mt-5"> <h3 class="card-header p-3">Codeigniter 4 FullCalender Tutorial Example - GetSampleCode.com</h3> <div class="card-body"> <div id='calendar'></div> </div> </div> </div> <script type="text/javascript"> $(document).ready(function () { var calendar = $('#calendar').fullCalendar({ editable: true, events: "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: "/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: '/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: '/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>
8 Define a Route
In
app/Config/Routes.php , define routes for your FullCalenderController:
use CodeIgniter\Router\RouteCollection; /** * @var RouteCollection $routes */ $routes->get('/', 'Home::index'); $routes->get('/fullcalender', 'FullCalenderController::index'); $routes->post('/fullcalenderAjax', 'FullCalenderController::ajax');
9 Folder Structure
10 Run Web Server to Test the App
Start the server using
php spark serve
Access the applicationat
http://localhost:8080/fullcalendar/ 11 Conclusion
This tutorial explained
how to integrate FullCalendar with events in CodeIgniter 4 . With features like drag-and-drop and AJAX integration, FullCalendar enhances event management capabilities. Use this
CodeIgniter 4 FullCalendar example tutorial as a foundation to customize and extend your application.
Tags