API Reference
Quick reference for Glueful's core APIs and helper functions.
Async
Glueful provides fiber-based concurrency with a cooperative scheduler, Task abstractions, async helpers, parallel HTTP client, and buffered I/O streams.
- Scheduler
Glueful\Async\FiberScheduler
- Methods:
spawn(callable, ?CancellationToken)
,all(Task[])
,race(Task[])
,sleep(float, ?CancellationToken)
- Limits:
max_concurrent_tasks
,max_task_execution_seconds
, memory/FD checks via config - Metrics: integrates with
Glueful\Async\Instrumentation\Metrics
- Methods:
- Tasks
Glueful\Async\Task\FiberTask
— cooperative task for async functionsGlueful\Async\Task\TimeoutTask
— wrap a callable with a timeoutGlueful\Async\Task\DelayedTask
— delay execution by N secondsGlueful\Async\Task\RepeatingTask
— fixed-interval repetition
- Helpers
scheduler(Request|null $req = null): Scheduler
async(callable $fn, ?CancellationToken $token = null, ?Request $req = null): Task
await(Task $task): mixed
await_all(array $tasks, ?Request $req = null): array
await_race(array $tasks, ?Request $req = null): mixed
async_sleep(float $seconds, ?CancellationToken $token = null, ?Request $req = null): void
async_sleep_default(...): void
async_stream(resource $stream, bool $buffered = true, ?int $bufferSize = null): AsyncStream
cancellation_token(): SimpleCancellationToken
- HTTP Client
- Contracts:
Glueful\Async\Contracts\Http\HttpClient
,HttpStreamingClient
- Default:
Glueful\Async\Http\CurlMultiHttpClient
- Config:
async.http.*
(poll interval, retries, retry delay/status, max concurrent) - Methods:
sendAsync(RequestInterface, ?Timeout = null, ?CancellationToken = null): Task<ResponseInterface>
andsendAsyncStream(...)
- Config:
- Testing:
Glueful\Async\Http\FakeHttpClient
- Contracts:
- I/O Streams
Glueful\Async\IO\AsyncStream
— non-blocking stream ops with timeouts/cancellationGlueful\Async\IO\BufferedAsyncStream
— read/write buffering wrapper
- Exceptions
Glueful\Async\Exceptions\TimeoutException
,ResourceLimitException
,CancelledException
,StreamException
,HttpException
- Middleware
Glueful\Async\Middleware\AsyncMiddleware
— alias:async
injects scheduler into request
- Configuration (config/async.php)
async.scheduler.poll_interval_seconds
,max_concurrent_tasks
,max_task_execution_seconds
async.http.poll_interval_seconds
,max_retries
,retry_delay_seconds
,retry_on_status
,max_concurrent
async.streams.buffer_size
async.limits.max_memory_mb
,async.limits.max_open_file_descriptors
Global Helpers
app()
Get service from container
$db = app('database'); // or app(DatabaseInterface::class)
$cache = app('cache'); // or app(CacheInterface::class)
database (via container)
Get database connection (no db()
helper; use the container)
$db = app('database'); // Glueful\Database\Connection
// Query builder entrypoints
$users = $db->table('users')->where('status', 'active')->get();
$users = $db->query()->from('users')->where('status', 'active')->get();
cache (via container)
Get cache instance (no cache()
helper; use the container)
$cache = app('cache.store'); // or app(Glueful\Cache\CacheStore::class)
$cache->set('key', 'value', 3600);
$value = $cache->get('key');
config()
Get configuration value
$appName = config('app.name');
$dbHost = config('database.host');
env()
Get environment variable
$apiKey = env('API_KEY');
$debug = env('APP_DEBUG', false);
logger (via container)
Get logger instance (no logger()
helper; use the container)
$logger = app('logger'); // or app(Psr\Log\LoggerInterface::class)
$logger->info('Message', ['context' => 'value']);
$logger->error('Error occurred', ['error' => $e->getMessage()]);
Database
Query Builder
// Entrypoints
$db = app('database');
$db->table('users')->get();
$db->table('users')->where('status', 'active')->get();
// Insert/Update/Delete (return ints)
$db->table('users')->insert(['name' => 'John', 'email' => '[email protected]']);
$db->table('users')->where('id', $id)->update(['name' => 'Jane']);
$db->table('users')->where('id', $id)->delete();
// Using query()->from(...)
$db->query()->from('users')->select(['id','name'])->get();
// Joins
$db->query()
->from('users')
->join('orders', 'users.id', '=', 'orders.user_id')
->select(['users.*', 'orders.total'])
->get();
// Aggregates
$db->query()->from('orders')->count();
$db->query()->from('orders')->max('total');
// Pagination
$db->query()->from('orders')->paginate(page: 1, perPage: 15);
// Optional: enable query result caching
$db->query()->from('users')->where('active', 1)->cache(3600)->get();
See Database Guide for full reference.
Cache
// Set
$cache = app('cache.store');
$cache->set('key', 'value', 3600);
// Get
$value = $cache->get('key');
$value = $cache->get('key', 'default');
// Remember pattern (pseudo if implemented)
$users = $cache->remember('users:active', function() use ($db) {
return $db->table('users')->where('status', 'active')->get();
}, 3600);
// Check existence
if ($cache->has('key')) { /* ... */ }
// Delete
$cache->delete('key');
// $cache->deletePattern('users:*'); // If pattern deletion supported by driver (Redis/File)
// Clear all
$cache->clear();
See Caching Guide for full reference.
Queue
// Obtain queue manager
$queue = app('queue'); // or app(Glueful\Queue\QueueManager::class)
// Push job (use job class name + payload)
$queue->push(SendEmailJob::class, ['userId' => $userId]);
// Delayed job
$queue->later(60, ProcessImageJob::class, ['path' => $path]);
// Push to specific queue
$queue->push(SendEmailJob::class, ['userId' => $userId], queue: 'emails');
// Bulk
$queue->bulk([
['job' => Job1::class, 'data' => ['id' => 1]],
['job' => Job2::class, 'data' => ['id' => 2]],
]);
See Queues & Jobs Guide for full reference.
Events
// Dispatch (using event dispatcher service)
app(Glueful\Events\EventDispatcher::class)->dispatch(new UserRegistered($user));
// Listener registration typically happens via service providers / attributes.
// Inline listening (if supported) would use dispatcher subscribe API.
See Events Guide for full reference.
HTTP
Request
$request->getMethod(); // GET, POST, etc.
$request->getPathInfo(); // /api/users
$request->getUri(); // Full URI
$request->get('name'); // Single input value
$request->request->all(); // POST body params
// Selecting specific fields:
$data = $request->request->all();
$subset = array_intersect_key($data, array_flip(['name','email']));
isset($data['name']); // Existence check
$request->files->get('avatar'); // Uploaded file
$request->headers->get('Authorization'); // Header
$request->getClientIp(); // Client IP
$request->headers->get('User-Agent'); // User agent
// Authenticated user (via auth helper/service)
$authUser = auth()?->user(); // or app(Glueful\Auth\AuthenticationService::class)->getCurrentUser()
Response
// Success
Response::success($data);
Response::created($data); // 201 Created
// Error
Response::error('Not found', 404);
Response::error('Validation failed', 422, ['errors' => $errors]);
// Headers
$resp = Response::success($data)->header('X-Custom', 'value');
See Requests & Responses Guide for full reference.
Validation
// Rule-object validation via ValidatorInterface
use Glueful\Helpers\RequestHelper;
use Glueful\Validation\Validator;
use Glueful\Validation\Rules\{Required, Type, Length, Email, Range};
$input = RequestHelper::getRequestData($request);
$rules = [
'name' => [new Required(), new Type('string'), new Length(min: 3, max: 255)],
'email' => [new Required(), new Email()],
'password' => [new Required(), new Length(min: 8)],
'age' => [new Required(), new Type('integer'), new Range(min: 18)],
];
$validator = new Validator($rules);
$errors = $validator->validate($input);
if ($errors !== []) {
return Response::validation($errors);
}
Available Rules (objects)
Required
- Field must be presentType('string'|'integer'|...)
- Type checkLength(min?, max?)
- String lengthRange(min?, max?)
- Numeric rangeEmail()
- Valid emailInArray([...])
- Must be in listDbUnique(...)
- Database uniquenessSanitize(...)
- Value sanitization
See Validation Guide for full reference.
Authentication
$authService = app(Glueful\Auth\AuthenticationService::class);
// Login (username or email)
$session = $authService->authenticate(['username' => $email, 'password' => $password]);
// Get authenticated user (object) from context
$user = auth()?->user();
// Check authentication
if (auth()?->check()) {
// Authenticated
}
// Logout / terminate session
$authService->terminateSession($token);
See Authentication Guide for full reference.
File Storage
// Storage via services
$storage = app(Glueful\Storage\StorageManager::class);
$disk = $storage->disk(); // default disk from config
// Write/read using Flysystem operator
$disk->write('avatars/user-1.png', $binaryContents);
$contents = $disk->read('avatars/user-1.png');
if ($disk->fileExists('avatars/user-1.png')) { /* ... */ }
$disk->delete('avatars/user-1.png');
// JSON helpers
$storage->putJson('data/users/1.json', ['id' => 1]);
$data = $storage->getJson('data/users/1.json');
// Public URL
$url = app(Glueful\Storage\Support\UrlGenerator::class)
->url('avatars/user-1.png');
See File Uploads Guide for full reference.
Logging
logger()->debug('Debug info', ['data' => $data]);
logger()->info('Info message', ['user_id' => $userId]);
logger()->warning('Warning', ['key' => $key]);
logger()->error('Error occurred', ['error' => $e->getMessage()]);
logger()->critical('Critical failure');
See Logging Guide for full reference.
Next Steps
- CLI Reference - Command-line tools
- Essentials - Core concepts
- Features - Framework features
- Advanced - Advanced topics