Settings system.
Open a command console, enter your project directory and execute:
$ composer require hexanet/settings-bundle
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:
$ composer require hexanet/settings-bundle
This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation.
Then, enable the bundle by adding it to the list of registered bundles
in the app/AppKernel.php
file of your project:
<?php
// app/AppKernel.php
// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new Hexanet\SettingsBundle\HexanetSettingsBundle(),
);
// ...
}
// ...
}
You have to create the table in the database, to do this we generate a migration:
bin/console doctrine:migrations:diff --filter-expression="/setting$/"
bin/console doctrine:migrations:migrate
A schema allows you to initialize the settings by giving them a default value.
First you need to create a class that extends from the SchemaInterface
interface:
<?php
namespace App\Settings\AppSchema;
use Hexanet\SettingsBundle\Schema\SettingsBuilder;
use Hexanet\SettingsBundle\Schema\SchemaInterface;
class AppSchema implements SchemaInterface
{
public function build(SettingsBuilder $settingsBuilder): void
{
$settingsBuilder->addSetting('itemsPerPage', 25);
}
}
Then declare it as service with the hexanet.settings_schema
tag :
App\Settings\AppSchema:
tags: [hexanet.settings_schema]
The bundle provide autoconfiguration for class that implement
SchemaInterface
.
After that we can use the php bin/console hexanet:settings:setup
command to generate all the settings, if a setting already exists the command ignores it.
public function indexAction(SettinsManagerInterface $settingsManager) {
// set and get
$settingsManager->set('tva', 19.6);
$settingsManager->get('tva');
// check if settign exists
$settingsManager->has('tva');
// get all settings
$settingsManager->all();
// retrieve a non-existent setting
$settingsManager->get('not here');
// SettingNotFoundException is throw
}
For production it's possible to activate the cache by modifying the config of the bundle:
// config/packages/prod/hexanet_settings.yaml
hexanet_settings:
cache: true
The Symfony cache app
is used (@cache.app)
Developed by Hexanet.
SettingsBundle is licensed under the MIT license.