The Request and Response classes handle all HTTP interactions in your application. Understanding these classes is essential for building robust web applications.
The Request object provides access to all incoming HTTP request data.
It's automatically passed to your controller methods.
<?php
namespace App\Controllers;
use Core\Controller;
use Core\Request;
class UserController extends Controller
{
public function store(Request $request)
{
// Access request data
$data = $request->post();
// Process the request...
}
}
?>
// URL: /users?page=2&limit=10
// Get a single GET parameter
$page = $request->get('page'); // Returns '2' or null
$limit = $request->get('limit', 20); // Returns '10' or default 20
// Check if parameter exists
if ($request->get('search')) {
$search = $request->get('search');
}
// Get all GET parameters as array
$allParams = $request->get();
// Example: ['page' => '2', 'limit' => '10', 'search' => 'john']
// Get a single POST field
$name = $request->post('name');
$email = $request->post('email', 'default@example.com'); // with default
// Check if field exists
if ($request->post('password')) {
$password = $request->post('password');
}
// Get all POST data as array
$data = $request->post();
// Example: ['name' => 'John', 'email' => 'john@example.com', 'password' => 'secret']
// Use in controller
public function store(Request $request)
{
$data = $request->post();
// Validate and process
$user = new User();
$user->create($data);
}
// Get input from either GET or POST
$value = $request->input('name');
$value = $request->input('name', 'default');
// Get all input (merges GET and POST)
$allInput = $request->input();
// Get a specific header
$token = $request->header('Authorization');
$contentType = $request->header('Content-Type', 'application/json'); // with default
// Common headers
$userAgent = $request->header('User-Agent');
$referer = $request->header('Referer');
// Get all headers as array
$headers = $request->headers();
// Example: ['Authorization' => 'Bearer token123', 'Content-Type' => 'application/json']
// Get HTTP method
$method = $request->method(); // Returns: 'GET', 'POST', 'PUT', 'DELETE', etc.
// Check method
if ($request->method() === 'POST') {
// Handle POST request
}
// Get request path
$path = $request->path(); // Returns: '/users/123' (without query string)
// Get full URI
$uri = $request->uri(); // Returns: '/users/123?page=2'
The Response class handles all HTTP responses. Use helper methods in controllers
or create responses directly.
// In controller
return $this->text('Hello, World!', 200);
// Or directly
use Core\Response;
return Response::text('Not Found', 404);
// In controller
return $this->json([
'status' => 'success',
'data' => User::all()
], 200);
// Or directly
use Core\Response;
return Response::json(['error' => 'Not found'], 404);
// In controller
return $this->redirect('/users');
// With status code
return $this->redirect('/login', 301); // Permanent redirect
// Or directly
use Core\Response;
return Response::redirect('/dashboard', 302);
// In controller (most common)
return $this->view('users.index', ['users' => $users]);
// Automatically returns a Response object with HTML content
Common HTTP status codes you can use:
| Code | Meaning | Usage |
|---|---|---|
200 |
OK | Successful request |
201 |
Created | Resource created |
301 |
Moved Permanently | Permanent redirect |
302 |
Found | Temporary redirect |
400 |
Bad Request | Invalid request |
401 |
Unauthorized | Authentication required |
403 |
Forbidden | Access denied |
404 |
Not Found | Resource not found |
500 |
Internal Server Error | Server error |
<?php
namespace App\Controllers;
use Core\Controller;
use Core\Request;
use App\Models\User;
class UserController extends Controller
{
public function index(Request $request)
{
// Get pagination from GET parameters
$page = $request->get('page', 1);
$limit = $request->get('limit', 10);
// Get search query
$search = $request->get('search');
// Fetch users (simplified)
$users = User::all();
// Return view
return $this->view('users.index', [
'users' => $users,
'page' => $page,
'search' => $search
]);
}
public function store(Request $request)
{
// Get POST data
$data = $request->post();
// Validate
if (empty($data['name']) || empty($data['email'])) {
return $this->json(['error' => 'Name and email required'], 400);
}
// Create user
$user = new User();
$userId = $user->create($data);
// Return success response
return $this->json([
'status' => 'success',
'message' => 'User created',
'id' => $userId
], 201);
}
public function show(Request $request, $id)
{
$user = User::find($id);
if (!$user) {
return $this->text('User not found', 404);
}
// Check if API request (via header)
if ($request->header('Accept') === 'application/json') {
return $this->json($user);
}
// Return HTML view
return $this->view('users.show', ['user' => $user]);
}
}
?>
Now that you understand Request & Response, learn about: