Installation:
composer require sbsaga/toon
Publish the config (if needed):
php artisan vendor:publish --provider="Sbsaga\Toon\ToonServiceProvider" --tag="config"
First Conversion:
use Sbsaga\Toon\Facades\Toon;
$data = [
'user' => ['name' => 'John', 'age' => 30],
'preferences' => ['theme' => 'dark', 'notifications' => true]
];
// Convert to TOON
$toonString = Toon::encode($data);
// Output: `user.name=John;user.age=30;preferences.theme=dark;preferences.notifications=1`
// Convert back to array
$decoded = Toon::decode($toonString);
First Use Case:
$prompt = "User data: " . Toon::encode($userData);
$response = $openAI->complete($prompt);
Data Serialization for AI:
$context = [
'user' => ['role' => 'admin', 'permissions' => ['create', 'edit']],
'query' => 'List all active orders'
];
$optimizedPrompt = "Context: " . Toon::encode($context) . "\nQuery: {$context['query']}";
URL-Friendly Data Transport:
$filters = ['status' => 'active', 'limit' => 10];
$url = route('search', ['data' => Toon::encode($filters)]);
// Decode in controller: Toon::decode(request('data'))
Log Compaction:
$logEntry = [
'event' => 'order_created',
'payload' => Toon::encode($orderData),
'metadata' => ['user_id' => 123]
];
Cache Key Generation:
$cacheKey = "user_{$userId}_" . Toon::encode(['prefs' => $prefs, 'last_active' => now()]);
cache()->put($cacheKey, $userData, now()->addHours(1));
Middleware for TOON Decoding: Decode TOON-encoded data in middleware for routes expecting compact payloads:
public function handle(Request $request, Closure $next) {
if ($request->has('toon_data')) {
$request->merge(['data' => Toon::decode($request->toon_data)]);
}
return $next($request);
}
Form Data Handling: Use TOON to serialize form inputs for submission:
// Blade form
<input type="hidden" name="filters" value="{{ Toon::encode($defaultFilters) }}">
// Controller
$filters = Toon::decode(request('filters'));
API Response Compression: Offer TOON as an alternative to JSON in API responses:
return response()->json([
'data' => Toon::encode($data),
'format' => 'toon'
]);
Nested Arrays/Objects:
user.address.city). Ensure your use case handles this explicitly.Toon::encode($data, ['nested_delimiter' => '|']) for custom separators.Boolean/Null Values:
true as 1, false as 0, and null as empty. Validate decoded data if strict typing is required.$data = Toon::decode($toonString);
$data = array_map(function($value) {
return $value === '1' ? true : ($value === '0' ? false : $value);
}, $data);
Special Characters:
;, =, and newlines by default. If working with user-generated data, ensure no malformed input breaks parsing.Toon::decode($toonString, ['strict' => false]) to catch malformed input gracefully.Token Efficiency Trade-offs:
$jsonLength = strlen(json_encode($data));
$toonLength = strlen(Toon::encode($data));
Laravel Collections:
$toon = Toon::encode($collection->toArray());
Validation Errors:
If Toon::decode() fails, check for:
;, =).=).Toon::decode($toonString, ['debug' => true]) for verbose error messages.Unexpected Output: TOON preserves array order. If order matters, ensure consistency in encoding/decoding:
$encoded = Toon::encode($array, ['preserve_order' => true]);
Custom Encoders/Decoders: Extend the package by creating custom encoders for domain-specific data:
Toon::extend('user', function($value) {
return "user_{$value['id']}_{$value['role']}";
});
TOON Middleware: Create reusable middleware for TOON-based request/response handling:
class ToonRequestMiddleware {
public function handle($request, Closure $next) {
if ($request->has('toon')) {
$request->merge(['data' => Toon::decode($request->toon)]);
}
return $next($request);
}
}
TOON Storage: Integrate with Laravel Filesystem for TOON-based storage:
$disk = Storage::disk('toon');
$disk->put('user_123_prefs', Toon::encode($prefs));
TOON Query Builder: Use TOON to serialize query parameters for complex searches:
$queryParams = ['status' => 'active', 'tags' => ['urgent', 'high-priority']];
$url = route('search', ['q' => Toon::encode($queryParams)]);
; for pairs and = for key-value separation. Override in config:
'delimiters' => [
'pair' => '|',
'key_value' => ':'
],
;, =, and \n. Add more via config:
'reserved_chars' => [';', '=', '\n', ','],
Batch Processing: For large datasets, process in chunks to avoid memory issues:
$chunkSize = 1000;
foreach (array_chunk($largeArray, $chunkSize) as $chunk) {
$toon = Toon::encode($chunk);
// Process $toon
}
Caching: Cache frequently encoded/decoded TOON strings:
$cacheKey = "toon_{$userId}";
if (!cache()->has($cacheKey)) {
cache()->put($cacheKey, Toon::encode($userData), now()->addHours(1));
}
How can I help you explore Laravel packages today?