murph-doc/docs/settings/global.md
Simon Vieille 385af624a6
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
update theme
2023-02-09 21:50:06 +01:00

3.5 KiB

# Global settings

Create settings

The creation of settings is based on events.

Using an event subscriber, you can create settings and define how to edit them. A setting's value is stored in json so a value could be a string, a boolean, an array, etc.

See the example below.

namespace App\EventSubscriber;

use App\Core\Event\Setting\SettingEvent;
use App\Core\EventSubscriber\SettingEventSubscriber as EventSubscriber;
use App\Core\Setting\SettingManager;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ColorType;

class SettingEventSubscriber extends EventSubscriber
{
    protected SettingManager $manager;

    public function __construct(SettingManager $manager)
    {
        $this->manager = $manager;
    }

    public function onInit(SettingEvent $event)
    {
        $this->manager->init('app_font_color', 'Design', 'Font color', , '#fff');
        $this->manager->init('app_background_color', 'Design', 'Background color', '#333');
        $this->manager->init('app_maintenance_enabled', 'System', 'Maintenance', false);
    }

    public function onFormInit(SettingEvent $event)
    {
        $data = $event->getData();
        $builder = $data['builder'];
        $entity = $data['entity'];

        if (in_array($entity->getCode(), ['app_font_color', 'app_background_color'])) {
            $builder->add(
                'value',
                ColorType::class,
                [
                    'label' => $entity->getLabel(),
                ]
            );
        }

        if (in_array($entity->getCode(), ['app_maintenance_enabled'])) {
            $builder->add(
                'value',
                CheckboxType::class,
                [
                    'label' => $entity->getLabel(),
                ]
            );
        }
    }
}

Result:

Access settings

Settings are accessible using App\Core\Setting\SettingManager which is a service.

namespace App\Controller;

use App\Core\Setting\SettingManager;
use Symfony\Component\HttpFoundation\Response;

class FooController
{
	public function foo(SettingManager $settingManager): Response
	{
		$fontColor = $settingManager->get('app_font_color');
		$backgroundColor = $settingManager->get('app_background_color');
		$maintenanceEnabled = $settingManager->get('app_maintenance_enabled');

		// ...
	}
}

In a template, you can use the function setting:

Font color: {{ setting('app_font_color') }}<br>
Background color: {{ setting('app_background_color') }}<br>
Maintenance enabled: {{ setting('app_maintenance_enabled') ? 'Yes' : 'No' }}<br>

Update settings

Settings are accessible using App\Core\Setting\SettingManager which is a service.

namespace App\Controller;

use App\Core\Setting\SettingManager;
use Symfony\Component\HttpFoundation\Response;

class FooController
{
	public function foo(SettingManager $settingManager): Response
	{
		$settingManager->set('app_font_color', '#f00');
		$settingManager->set('app_background_color', '#00f');
		$settingManager->set('app_maintenance_enabled', true);

		// ...
	}
}

You can also edit them from UI:

Options

You can add options using this way:

$event->setOption('view', 'large');

Available options:

  • view (default: false): show a large modal