1. Go to this page and download the library: Download azaharizaman/nexus-setting 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/ */
azaharizaman / nexus-setting example snippets
use Nexus\Setting\Services\SettingsManager;
use Nexus\Setting\Contracts\SettingRepositoryInterface;
use Nexus\Setting\Contracts\SettingsCacheInterface;
// Inject dependencies (bound by application layer)
$manager = new SettingsManager(
$userRepo, // SettingRepositoryInterface implementation
$tenantRepo, // SettingRepositoryInterface implementation
$appRepo, // SettingRepositoryInterface implementation
$cache // SettingsCacheInterface implementation
);
// Get setting with hierarchical resolution
$timezone = $manager->getString('timezone', 'UTC');
// Set user-specific setting
$manager->setUserSetting('user-123', 'theme', 'dark');
// Set tenant-specific setting
$manager->setTenantSetting('tenant-456', 'currency', 'MYR');
// Check if setting exists
if ($manager->has('mail.smtp.host')) {
$host = $manager->getString('mail.smtp.host');
}
// Get setting origin (which layer it came from)
$origin = $manager->getOrigin('timezone'); // 'user', 'tenant', or 'application'
use Nexus\Setting\Services\SettingsCacheManager;
$cacheManager = new SettingsCacheManager($cacheInterface);
// Cache with TTL
$value = $cacheManager->remember('setting.key', fn() => $expensive_operation());
// Invalidate specific key
$cacheManager->forget('setting.key');
// Invalidate all settings for a scope
$cacheManager->forgetScope('tenant', 'tenant-456');
// Flush entire cache
$cacheManager->flush();
use Nexus\Setting\Services\SettingsSchemaRegistry;
use Nexus\Setting\Services\SettingsValidationService;
$registry = new SettingsSchemaRegistry();
// Register a setting schema
$registry->register('api.timeout', [
'type' => 'integer',
'min' => 1,
'max' => 300,
'description' => 'API timeout in seconds'
]);
$validator = new SettingsValidationService($registry);
// Validate before setting
if ($validator->validate('api.timeout', 30)) {
$manager->setTenantSetting('tenant-456', 'api.timeout', 30);
}
// Example: Getting 'timezone' setting
// 1. Check user settings for current user
// 2. If not found, check tenant settings
// 3. If not found, check application config
// 4. If not found, return default value
$timezone = $manager->getString('timezone', 'UTC');
interface SettingRepositoryInterface
{
public function get(string $key, mixed $default = null): mixed;
public function set(string $key, mixed $value): void;
public function delete(string $key): void;
public function has(string $key): bool;
public function getAll(): array;
public function getByPrefix(string $prefix): array;
public function getMetadata(string $key): ?array;
}
interface SettingsCacheInterface
{
public function get(string $key, mixed $default = null): mixed;
public function set(string $key, mixed $value, ?int $ttl = null): void;
public function forget(string $key): void;
public function flush(): void;
public function has(string $key): bool;
}
interface SettingsAuthorizerInterface
{
public function canView(string $userId, string $key): bool;
public function canEdit(string $userId, string $key): bool;
}
// Example test
$mockUserRepo = $this->createMock(SettingRepositoryInterface::class);
$mockTenantRepo = $this->createMock(SettingRepositoryInterface::class);
$mockAppRepo = $this->createMock(SettingRepositoryInterface::class);
$mockCache = $this->createMock(SettingsCacheInterface::class);
$manager = new SettingsManager($mockUserRepo, $mockTenantRepo, $mockAppRepo, $mockCache);
// Test hierarchical resolution
$mockUserRepo->expects($this->once())
->method('get')
->with('timezone', null)
->willReturn('Asia/Kuala_Lumpur');
$result = $manager->getString('timezone', 'UTC');
$this->assertEquals('Asia/Kuala_Lumpur', $result);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.