example.com/index.php/controller/method/param1/param2/param3/
index.php:前端控制器(可透過 .htaccess 隱藏)controller:控制器類別名method:公開方法名paramN:傳遞給方法的參數,依序對應RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
瀏覽器直接訪問 example.com/controller/method/1/2/3,SEO 友好。
<!-- application/views/calculate_view.php -->
<h2>網頁計算器</h2>
<input type="text" id="num1" placeholder="數字1">
<select id="operate">
<option value="add">+</option>
<option value="sub">-</option>
<option value="mul">×</option>
<option value="div">÷</option>
</select>
<input type="text" id="num2" placeholder="數字2">
<button id="calc">計算</button>
<div id="result"></div>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6/dist/jquery.min.js"></script>
<script>
$('#calc').click(function() {
$.post('= site_url('calculate/count') ?>', {
num1: $('#num1').val(),
operate: $('#operate').val(),
num2: $('#num2').val()
}, function(res) {
$('#result').html('結果: ' + res);
}, 'json');
});
</script>
<?php
// application/controllers/Calculate.php
class Calculate extends CI_Controller
{
public function index()
{
$this->load->view('calculate_view');
}
public function count()
{
$num1 = $this->input->post('num1');
$op = $this->input->post('operate');
$num2 = $this->input->post('num2');
if ($num1 === '' || $num2 === '' || $op === '') {
echo json_encode(['error' => '參數不完整']);
return;
}
$this->load->model('calculate_model');
$result = $this->calculate_model->count($num1, $op, $num2);
echo json_encode(['result' => $result]);
}
}
<?php
// application/models/Calculate_model.php
class Calculate_model extends CI_Model
{
public function count($a, $op, $b): float|string
{
switch ($op) {
case 'add': return $a + $b;
case 'sub': return $a - $b;
case 'mul': return $a * $b;
case 'div':
if ($b == 0) return '除數不能為零';
return $a / $b;
default: return '未知運算子';
}
}
}
$this->input->post() 統一獲取 POST/JSON 資料,自動處理 XSS 過濾{success: bool, data: ..., message: ...}application/config/routes.php,可自訂 RESTful 風格$this->form_validation)$this->db)