About Lesson
To create an autocomplete example 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 Autocomplete.php
in the app/Controllers/autocomplete
folder.
<?php
namespace App\Controllers\autocomplete;
use App\Controllers\BaseController;
use App\Models\state\StateModel;
class Autocomplete 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'] = "Autocomplete Example";
$data ['main_content'] = "autocomplete/find";
echo view('innerpages/template', $data);
}
public function search() {
$keyword = $this->request->getPost('keyword');
$where = 'name LIKE "%'.$keyword.'%"';
$result = $this->state->getEntryList($where);
$list = [];
foreach($result as $row) {
$list [] = [
'id' => $row->id,
'value' => $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/state
folder.
<?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/autocomplete
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" />
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css"></link>
<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>
<!-- Autocompelete -->
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
</head>
<body>
<div class="container">
<div class="jumbotron">
<h1>Autocomplete Example </h1>
<p>CodeIgniter 4.</p>
</div>
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label>Enter Keywords</label>
<input type="text" name="keyword" id="keyword" class="form-control" placeholder="Enter keywords" autocomplete="off" required>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function() {
$("#keyword").autocomplete({
source: function(request, response) {
$.post('<?php echo base_url("autocomplete/search"); ?>', {keyword : request.term}, function(result) {
response(result);
}, 'json')
},
minLength: 1,
select: function( event, ui ) {
console.log( "Selected: " + ui.item.value + " aka " + ui.item.id );
}
});
});
</script>
</body>
</html>
Step 5: Set Up Routes
Edit the app/config/Routes.php
file to define routes for your controller.
// autocomplete
$routes->get('autocomplete/find', 'autocomplete\Autocomplete::find');
$routes->post('autocomplete/search', 'autocomplete\Autocomplete::search');