1. Go to this page and download the library: Download fedale/setting-bundle 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/ */
use Fedale\SettingBundle\Contract\SettingsManagerInterface;
final class GeneralController
{
public function __construct(
private readonly SettingsManagerInterface $settings,
) {
}
public function index(): Response
{
// tenant 12: "Cliente XYZ" if an override exists, otherwise the global default
$title = $this->settings->get('general.title', 'Gestionale');
$theme = $this->settings->get('general.theme', 'classic'); // inherited from tenant 0
$useCache = $this->settings->get('general.useCache', false); // already a bool
// write (current tenant, resolved by the TenantProvider)
$this->settings->set('general.footer', '(c) 2026', type: 'string');
$this->settings->set('general.useCache', true, type: 'bool');
// write explicitly to a tenant / to the global scope
$this->settings->set('general.title', 'Cliente XYZ', tenantId: 12);
$this->settings->set('general.theme', 'dark', tenantId: 0); // default for everyone
// ...
}
}
// src/Setting/RequestTenantProvider.php
use Fedale\SettingBundle\Contract\TenantProviderInterface;
final class RequestTenantProvider implements TenantProviderInterface
{
public function __construct(private readonly RequestStack $stack) {}
public function getCurrentTenantId(): int
{
return (int) $this->stack->getCurrentRequest()?->attributes->get('_tenant_id', 0);
}
}
// config/services.php
use Fedale\SettingBundle\Contract\SettingConstraintsProviderInterface;
use Fedale\SettingBundle\Setting\Validation\ArrayConstraintsProvider;
use Symfony\Component\Validator\Constraints as Assert;
return static function (ContainerConfigurator $container): void {
$container->services()
->set('app.setting_constraints', ArrayConstraintsProvider::class)
->args([[
'myKey' => [new Assert\Length(min: 3, max: 10)],
'general.title' => [new Assert\NotBlank()],
'general.email' => [new Assert\Email()],
]]);
$container->services()
->alias(SettingConstraintsProviderInterface::class, 'app.setting_constraints');
};
try {
$this->settings->set('myKey', 'ab'); // shorter than 3
} catch (\Fedale\SettingBundle\Exception\SettingValidationException $e) {
$e->getKey(); // 'myKey'
$e->getViolationMessages(); // ['This value is too short. It should have 3 characters or more.']
}
// src/Setting/AppSettingConstraintsProvider.php
use Fedale\SettingBundle\Contract\SettingConstraintsProviderInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints as Assert;
final class AppSettingConstraintsProvider implements SettingConstraintsProviderInterface
{
/**
* @return list<Constraint>
*/
public function constraintsFor(string $key): array
{
return match (true) {
// every key under "limits." must be a positive integer
str_starts_with($key, 'limits.') => [new Assert\Positive()],
'myKey' === $key => [new Assert\Length(min: 3, max: 10)],
default => [], // free-form
};
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.