1. Go to this page and download the library: Download onaonbir/oo-metas 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/ */
onaonbir / oo-metas example snippets
use OnaOnbir\OOMetas\Traits\HasMetas;
class User extends Model
{
use HasMetas;
}
// Set metadata
$user->setMeta('theme', 'dark');
$user->setMeta('profile.avatar_url', 'https://example.com/avatar.jpg');
// Get metadata
$theme = $user->getMeta('theme'); // 'dark'
$avatar = $user->getMeta('profile.avatar_url');
$nonExistent = $user->getMeta('non_existent', 'default_value');
// Check if meta exists
if ($user->hasMeta('theme')) {
// Theme is set
}
// Remove metadata
$user->forgetMeta('theme');
// Set multiple metas at once
$user->setManyMetas([
'theme' => 'dark',
'language' => 'en',
'timezone' => 'UTC'
]);
// Get multiple metas
$settings = $user->getManyMetas(['theme', 'language', 'timezone']);
// Result: ['theme' => 'dark', 'language' => 'en', 'timezone' => 'UTC']
// Get all metas for a user
$allMetas = $user->getAllMetas();
// Remove multiple metas
$user->forgetManyMetas(['theme', 'language']);
// Remove all metas
$user->forgetAllMetas();
// Pull (get and remove)
$theme = $user->pullMeta('theme', 'light'); // Gets value and removes it
// Remember (get or set via callback)
$settings = $user->rememberMeta('user_settings', function() {
return ['theme' => 'light', 'language' => 'en'];
});
// Toggle boolean values
$isActive = $user->toggleMeta('is_active'); // true/false
// Work with array metadata
$user->setMeta('tags', ['developer', 'php']);
// Append to array
$user->appendToMeta('tags', 'laravel'); // ['developer', 'php', 'laravel']
// Prepend to array
$user->prependToMeta('tags', 'senior'); // ['senior', 'developer', 'php', 'laravel']
// Remove from array
$user->removeFromMetaArray('tags', 'php'); // ['senior', 'developer', 'laravel']
// Get with type casting
$tags = $user->getMetaAsArray('tags'); // Always returns array
$name = $user->getMetaAsString('display_name', 'Anonymous');
$count = $user->getMetaAsInt('login_count', 0);
$isActive = $user->getMetaAsBool('is_active', false);
$score = $user->getMetaAsFloat('score', 0.0);
// Set user role in a specific project
$user->setMeta('role', 'admin', $project);
$user->setMeta('permissions', ['read', 'write', 'delete'], $project);
// Get user role for this project
$role = $user->getMeta('role', 'guest', $project); // 'admin'
// Different project, different role
$role2 = $user->getMeta('role', 'guest', $anotherProject); // 'guest'
// You can also use class strings for type-only connections
$user->setMeta('notification_preference', 'email', Project::class);
use OnaOnbir\OOMetas\OOMetas;
// All trait methods are available as static calls
OOMetas::set($user, 'theme', 'dark');
$theme = OOMetas::get($user, 'theme');
OOMetas::forget($user, 'theme');
// Batch operations
OOMetas::setMany($user, ['key1' => 'value1', 'key2' => 'value2']);
$values = OOMetas::getMany($user, ['key1', 'key2']);
use OnaOnbir\OOMetas\Contracts\MetaServiceInterface;
class UserSettingsController
{
public function __construct(
private MetaServiceInterface $metaService
) {}
public function updateSettings(User $user, array $settings)
{
$this->metaService->setMany($user, $settings);
}
}
use OnaOnbir\OOMetas\Exceptions\InvalidMetaKeyException;
use OnaOnbir\OOMetas\Exceptions\MetaNotFoundException;
use OnaOnbir\OOMetas\Exceptions\MetaValidationException;
try {
$user->setMeta('invalid@key!', 'value');
} catch (InvalidMetaKeyException $e) {
// Handle invalid key format
}
// Mock the service in tests
$this->app->bind(MetaServiceInterface::class, function () {
return Mockery::mock(MetaServiceInterface::class);
});
// Test with different repository implementations
$this->app->bind(MetaRepositoryInterface::class, InMemoryMetaRepository::class);
class CustomMetaRepository implements MetaRepositoryInterface
{
// Implement your custom logic
}
// Register in service provider
$this->app->bind(MetaRepositoryInterface::class, CustomMetaRepository::class);