1. Go to this page and download the library: Download brdv/forerunner library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
brdv / forerunner example snippets
namespace App\Structures;
use Blaspsoft\Forerunner\Schema\Struct;
use Blaspsoft\Forerunner\Schema\Property;
class UserProfile
{
public static function schema(): array
{
return Struct::define('user_profile', 'Description of user_profile', function (Property $property) {
$property->string('example_field');
// Add your fields here
$property->strict(); // All fields
use Blaspsoft\Forerunner\Schema\Struct;
use Blaspsoft\Forerunner\Schema\Property;
$schema = Struct::define('User', 'A user schema', function (Property $property) {
$property->string('name', 'The user\'s full name')->})->toArray();
use Blaspsoft\Forerunner\Facades\Schema;
use Blaspsoft\Forerunner\Schema\Property;
$schema = Schema::define('User', 'A user schema', function (Property $property) {
$property->string('name', 'The user\'s full name')->
$property->string('username', 'The username')
->minLength(3)
->maxLength(50)
->pattern('^[a-zA-Z0-9_]+$')
->
$property->int('age', 'User age')
->min(0)
->max(150)
->default(18);
// Alias
$property->integer('count');
$property->float('price', 'Product price')
->min(0.0)
->max(9999.99);
// Alias
$property->number('rating')->min(0)->max(5);
$property->boolean('is_active', 'Account status')
->default(true);
// Alias
$property->bool('verified');
// Simple array
$property->array('tags', 'User tags')
->items('string')
->minItems(1)
->maxItems(10);
// Array of objects
$property->array('addresses')->items('object', function (Property $item) {
$item->string('street')->
$property->int('age')
->min(0) // Minimum value
->max(150) // Maximum value
->default(18); // Default value
$property->array('tags')
->items('string') // Type of array items
->minItems(1) // Minimum array length
->maxItems(10); // Maximum array length
$property->string('field')
-> // Mark as optional (default)
->default('value') // Set default value
->description('Field description'); // Add description
// Email field with automatic format validation
$property->email('email')->d')->d
$property->date('birth_date');
// Time field
$property->time('start_time');
// IPv4 address
$property->ipv4('ip_address');
// IPv6 address
$property->ipv6('ipv6_address');
// Hostname
$property->hostname('server_name');
// Allow additional properties
$property->additionalProperties(true);
// Disallow additional properties
$property->additionalProperties(false); // This is the default
// Or use the convenient strict() helper
$property->strict(); // Disallows additional properties AND marks all fields as
// Perfect for OpenAI Structured Outputs
$schema = Struct::define('User', 'A user schema', function (Property $property) {
$property->string('fullname');
$property->email('email');
$property->int('age')->min(0)->max(120);
$property->string('location');
// Call strict() at the end to mark all fields as
$property->title('User Schema');
$property->description('Schema for user data validation');
$property->schemaVersion('https://json-schema.org/draft/2020-12/schema');
use Blaspsoft\Forerunner\Schema\Struct;
use Blaspsoft\Forerunner\Schema\Property;
$schema = Struct::define('AdvancedUser', 'Comprehensive user data structure', function (Property $property) {
// Schema metadata
$property->schemaVersion();
$property->title('Advanced User Schema');
// Helper methods
$property->uuid('id')->>nullable();
// Array with unique items
$property->array('tags')
->items('string')
->uniqueItems()
->minItems(1)
->maxItems(10);
// Advanced field configuration
$property->string('username')
->title('Username')
->description('Unique username for the account')
->minLength(3)
->maxLength(30)
->pattern('^[a-zA-Z0-9_]+$')
->
use Blaspsoft\Forerunner\Schema\Struct;
use Blaspsoft\Forerunner\Schema\Property;
$schema = Struct::define('UserProfile', 'A complete user profile schema', function (Property $property) {
$property->string('name', 'The user\'s full name')
->minLength(1)
->maxLength(100)
->roperty->array('tags', 'User tags')
->items('string')
->minItems(0)
->maxItems(10);
$property->object('address', function (Property $address) {
$address->string('street', 'Street name')->
$schema = Struct::define('BlogPost', 'A blog post with author and comments', function (Property $property) {
$property->string('title')->thor', function (Property $author) {
$author->string('name')->')->Items(1);
$property->enum('status', ['draft', 'published', 'archived'])
->default('draft');
$property->int('views')->min(0)->default(0);
})->toArray();
$struct = Struct::define('User', 'A user schema', function (Property $property) {
$property->string('name')->
$struct = Struct::define('User', 'A user schema', function (Property $property) {
$property->string('name')->
// In your structure class (generated by make:struct)
class UserProfile
{
public static function schema(): array
{
return Struct::define('user_profile', 'A user profile schema', function (Property $property) {
$property->string('name')->
bash
composer analyse
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.