CodeIgniter 4 AJAX Tutorial
About Lesson

To create a select2 with server-side in CodeIgniter 4, follow these steps:

 

Step 1: Database Setup

CREATE TABLE `state_info` (
  `id` int(11) NOT NULL,
  `country_id` varchar(10) NOT NULL,
  `name` varchar(100) NOT NULL,
  `tin` varchar(10) NOT NULL,
  `code` varchar(100) NOT NULL,
  `ip_address` varchar(100) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `status` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
ALTER TABLE `state_info`
  ADD PRIMARY KEY (`id`);

 

Step 2: Controller

Create a controller to handle CRUD operations. Create a new file named Crud.php in the app/Controllers/crudfolder.

<?php
namespace App\Controllers\crud;

use App\Controllers\BaseController;
use App\Models\state\StateModel;

class Crud extends BaseController {

public function __construct() {
$db = db_connect();
$this->state = new StateModel($db);
}

public function index() {
$this->find();
}

public function find() {
$data = [];
$data ['content_title'] = "Find State";
$data ['state_dropdown'] = $this->stateDropdown();
echo view('crud/find', $data);
}

public function search() {
$search = $this->request->getPost('search');
$where = 'name LIKE "%'.$search.'%"';
$result = $this->state->getEntryList($where);
$list = [];
foreach($result as $row) {
// $list [$row->name] = $row->name;
$list [] = [
'id' => $row->name,
'text' => $row->name,
];
}
echo json_encode($list);
}
}

 

Step 3: Model

Create a model to handle database operations. Create a new file named StateModel.php in the app/Models/statefolder.

<?php
namespace App\Models\state;

use CodeIgniter\Model;
use CodeIgniter\Database\ConnectionInterface;

class StateModel extends Model {

protected $db;

public function __construct(ConnectionInterface &$db) {
$this->db =& $db;
$this->table = 'state_info';
}

public function addEntry($data) {
$this->db->table($this->table)
->insert($data);
return $this->db->insertID();
}

public function getEntry($where) {
return $this->db->table($this->table)
->where($where)
->get()
->getRow();
}

public function getEntryList($where = 0) {
if($where) {
return $this->db->table($this->table)
->where($where)
->get()
->getResult();
} else {
return $this->db->table($this->table)
->get()
->getResult();
}

}

public function updateEntry($where, $data) {
return $this->db->table($this->table)
->where($where)
->set($data)
->update();
}

public function deleteEntry($where) {
return $this->db->table($this->table)
->where($where)
->delete();
}
}
 

 

Step 4: Create Views

Create views (find.php) in the app/Views/crud folder for listing, creating, updating, and deleting records.

find.php

<!DOCTYPE html>
<html lang="en">

<head>
<title><?php echo $content_title; ?></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />

<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>

<!-- DataTables -->
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.7/css/jquery.dataTables.min.css">
<script src="https://cdn.datatables.net/1.13.7/js/jquery.dataTables.min.js"></script>
</head>

<body>
<div class="container">
<div class="jumbotron">
<h1>Select2 Example </h1>
<p>CodeIgniter 4.</p>
</div>
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label>State</label>
<?php
$options = [
'1' => 'One',
'2' => 'Two',
];
echo form_dropdown(['name' => 'state', 'id' => 'state', 'class' => 'form-control get_state_list', 'options' => $state_dropdown]);
?>
</div>

</div>
</div>
</div>

<script>
$(document).ready(function() {
// select2
$(".select2").select2();

$('.get_state_list').select2({
ajax: {
url: '<?php echo base_url('crud/search'); ?>',
dataType: 'json',
method: 'POST',
delay: 250,
data: function (params) {
return {
search: params.term
}
},
processResults: function (response) {
return {
results: response
}
},
cache: true
},
minimumInputLength: 1,
placeholder: 'Enter query'
});
});
</script>

</body>

</html>

 

Step 5: Set Up Routes

Edit the app/config/Routes.php file to define routes for your controller.

// select2
$routes->get('crud/find', 'crud\Crud::find');
$routes->post('crud/search', 'crud\Crud::search');

 

Step 6: Run Project & Output

 

CodeIgniter4 Select2 Server Side