JINSI YA KUFAHAMU REQUEST LIFECYCLE KWA PHP MVC
Katika MVC architecture, kila request hupitia hatua fulani zinazoelezewa kama Request Lifecycle.
Kuelewa request lifecycle hukusaidia:
Kuelewa vizuri flow ya system yako
Kuboreshwa performance na debugging
Kutengeneza code safi, modular, na scalable
⚙️ 2. Msingi wa MVC Request Lifecycle
Kawaida hatua kuu ni hizi 6:
Browser → index.php → Router → Controller → Model → View → Response
Kila sehemu ina jukumu maalum:
Step Component Description
1 Browser Mtumiaji anatuma HTTP request (mfano /students/1)
2 index.php Front controller — inachukua request yote
3 Router Inaamua controller gani inapaswa kuitwa
4 Controller Inachakata request, kuwasiliana na Model
5 Model Inashughulika na database/data logic
6 View Inarudisha HTML/JSON kwa mtumiaji
🧩 3. Mfano wa Request Lifecycle
🗂️ Muundo wa Project
mvc_project/
│
├── app/
│ ├── controllers/
│ │ └── StudentController.php
│ ├── models/
│ │ └── Student.php
│ └── views/
│ └── student_view.php
├── core/
│ ├── Router.php
│ └── Controller.php
└── public/
└── index.php
🧠 Hatua kwa Hatua
1️⃣ Browser Request (User Input)
Mtumiaji anaingia URL kama:
https://localhost/mvc_project/students/1
Browser inatuma HTTP GET request kwenda index.php.
2️⃣ index.php (Front Controller)
<?php
require_once '../core/Router.php';
require_once '../app/controllers/StudentController.php';
$router = new Router();
$router->add('GET', '/students/(\d+)', ['StudentController', 'show']);
$method = $_SERVER['REQUEST_METHOD'];
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$router->dispatch($method, $uri);
📌 index.php ndiyo “entry point” ya kila request.
3️⃣ Router (Route Matching)
<?php
class Router {
private $routes = [];
public function add($method, $uri, $action){
$this->routes[] = ['method'=>$method, 'uri'=>$uri, 'action'=>$action];
}
public function dispatch($method, $uri){
foreach($this->routes as $route){
if($method == $route['method'] && preg_match("#^".$route['uri']."$#", $uri, $matches)){
array_shift($matches);
[$controller, $function] = $route['action'];
$controllerInstance = new $controller();
call_user_func_array([$controllerInstance, $function], $matches);
return;
}
}
echo "404 Not Found";
}
}
📌 Router inalinganisha URL na route husika, kisha inaamua controller gani iitwe.
4️⃣ Controller (Business Logic)
<?php
require_once '../app/models/Student.php';
class StudentController {
public function show($id){
$student = new Student();
$data = $student->getById($id);
require '../app/views/student_view.php';
}
}
📌 Controller hupokea data kutoka kwa Model na kuipitisha kwa View.
5️⃣ Model (Data Handling)
<?php
class Student {
private $students = [
1 => ['name' => 'John Doe', 'class' => 'Form 3'],
2 => ['name' => 'Jane Smith', 'class' => 'Form 4']
];
public function getById($id){
return $this->students[$id] ?? null;
}
}
📌 Model inasimamia data — inaweza kutoka database au array.
6️⃣ View (Output Response)
<!-- student_view.php -->
<!DOCTYPE html>
<html>
<head><title>Student Details</title></head>
<body>
<h2>Student Information</h2>
<?php if($data): ?>
<p><strong>Name:</strong> <?= htmlspecialchars($data['name']); ?></p>
<p><strong>Class:</strong> <?= htmlspecialchars($data['class']); ?></p>
<?php else: ?>
<p>Student not found!</p>
<?php endif; ?>
</body>
</html>
📌 View inaunda HTML na kurudisha response kwa browser.
🔁 7. Flow Summary Diagram
[Browser]
↓
[index.php]
↓
[Router]
↓
[Controller]
↓
[Model]
↓
[View]
↓
[Response → Browser]
🔑 8. Best Practices
Tumia MVC pattern kikamilifu — usichanganye logic na views
Sanitize user input kabla ya kutumia Models
Tumia autoloading (PSR-4) kupunguza require nyingi
Tumia Router inayoweza kushughulika na multiple HTTP methods
Weka error handling safi (404, 500 responses)
✅ 9. Hitimisho
Kuelewa Request Lifecycle ni msingi wa kujenga PHP MVC frameworks kama Laravel, CodeIgniter, au framework zako binafsi.
Inarahisisha debugging, optimization, na modular coding.
🔗 Tembelea:
👉 https://www.faulink.com/
Kwa mafunzo zaidi kuhusu PHP MVC, routing, na best practices za web development.