Examples
Real-world code samples for WPZylos HTTP.
REST API Controller
use WPZylos\Framework\Http\Request;
use WPZylos\Framework\Http\Response;
class ProductController
{
public function index(Request $request): Response
{
$page = $request->query('page', 1);
$perPage = $request->query('per_page', 10);
$products = $this->productService->paginate($page, $perPage);
return Response::json([
'data' => $products,
'meta' => ['page' => $page, 'per_page' => $perPage]
]);
}
public function store(StoreProductRequest $request): Response
{
$product = $this->productService->create($request->validated());
return Response::json(['data' => $product], 201);
}
public function show(Request $request, int $id): Response
{
$product = $this->productService->find($id);
if (!$product) {
return Response::json(['error' => 'Not found'], 404);
}
return Response::json(['data' => $product]);
}
}
AJAX Handler
class SettingsController
{
public function save(Request $request): Response
{
// Nonce verification (if not auto-handled by router)
if (!wp_verify_nonce($request->input('_wpnonce'), 'save_settings')) {
return Response::json(['error' => 'Invalid nonce'], 403);
}
$settings = $request->only(['option1', 'option2', 'option3']);
foreach ($settings as $key => $value) {
update_option("myplugin_{$key}", sanitize_text_field($value));
}
return Response::json(['success' => true, 'message' => 'Settings saved']);
}
}
File Upload
class UploadController
{
public function upload(Request $request): Response
{
$file = $request->file('file');
if ($file === null) {
return Response::json(['error' => 'No file uploaded'], 400);
}
// Validate file
$allowed = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($file['type'], $allowed)) {
return Response::json(['error' => 'Invalid file type'], 422);
}
// Handle upload using WordPress
require_once(ABSPATH . 'wp-admin/includes/file.php');
$upload = wp_handle_upload($file, ['test_form' => false]);
if (isset($upload['error'])) {
return Response::json(['error' => $upload['error']], 500);
}
return Response::json([
'url' => $upload['url'],
'file' => $upload['file']
]);
}
}
Form Request Validation
class UpdateProfileRequest extends FormRequest
{
public function rules(): array
{
return [
'display_name' => ['required', 'string', 'max:100'],
'email' => ['required', 'email'],
'bio' => ['nullable', 'string', 'max:500'],
'website' => ['nullable', 'url'],
];
}
public function messages(): array
{
return [
'display_name.required' => 'Please enter your name',
'email.email' => 'Please enter a valid email address',
];
}
public function authorize(): bool
{
return is_user_logged_in();
}
}