Integration
Database Integration
PDO Configuration
php
<?php
class DatabaseConnection
{
private static ?PDO $instance = null;
public static function getInstance(): PDO
{
if (self::$instance === null) {
$host = $_ENV['DB_HOST'];
$dbname = $_ENV['DB_DATABASE'];
$username = $_ENV['DB_USERNAME'];
$password = $_ENV['DB_PASSWORD'];
$dsn = "mysql:host={$host};dbname={$dbname};charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
];
self::$instance = new PDO($dsn, $username, $password, $options);
}
return self::$instance;
}
}
Repository Pattern
php
<?php
abstract class BaseRepository
{
protected PDO $db;
protected string $table;
public function __construct()
{
$this->db = DatabaseConnection::getInstance();
}
public function find(int $id): ?array
{
$stmt = $this->db->prepare("SELECT * FROM {$this->table} WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetch() ?: null;
}
public function create(array $data): int
{
$columns = implode(',', array_keys($data));
$placeholders = ':' . implode(', :', array_keys($data));
$stmt = $this->db->prepare("INSERT INTO {$this->table} ({$columns}) VALUES ({$placeholders})");
$stmt->execute($data);
return (int) $this->db->lastInsertId();
}
}
Redis Integration
php
<?php
class RedisConnection
{
private static ?Redis $instance = null;
public static function getInstance(): Redis
{
if (self::$instance === null) {
self::$instance = new Redis();
self::$instance->connect($_ENV['REDIS_HOST'], $_ENV['REDIS_PORT']);
if ($_ENV['REDIS_PASSWORD']) {
self::$instance->auth($_ENV['REDIS_PASSWORD']);
}
}
return self::$instance;
}
}
class CacheService
{
private Redis $redis;
public function __construct()
{
$this->redis = RedisConnection::getInstance();
}
public function get(string $key): mixed
{
$value = $this->redis->get($key);
return $value ? unserialize($value) : null;
}
public function set(string $key, mixed $value, int $ttl = 3600): bool
{
return $this->redis->setex($key, $ttl, serialize($value));
}
}
External API Integration
php
<?php
class ApiClient
{
private string $baseUrl;
private array $headers;
public function __construct(string $baseUrl, array $headers = [])
{
$this->baseUrl = rtrim($baseUrl, '/');
$this->headers = array_merge([
'Content-Type: application/json',
'Accept: application/json'
], $headers);
}
public function get(string $endpoint): array
{
return $this->makeRequest('GET', $endpoint);
}
public function post(string $endpoint, array $data): array
{
return $this->makeRequest('POST', $endpoint, $data);
}
private function makeRequest(string $method, string $endpoint, array $data = []): array
{
$url = $this->baseUrl . '/' . ltrim($endpoint, '/');
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_HTTPHEADER => $this->headers,
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => true,
]);
if (!empty($data)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
}
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
throw new Exception("CURL Error: {$error}");
}
if ($httpCode >= 400) {
throw new Exception("HTTP Error: {$httpCode}");
}
return json_decode($response, true);
}