Skip to content

Settings - default value (consistency) #3

@MartinKreizl

Description

@MartinKreizl

Probirali jsme to spolu dnes s @lukaspijak v kancelari a to reseni se ti libilo. Zkusim to tady nastinit:

Mame kod, ktery se snazi nacist nejaky klic (main:dispatcher) a v pripade ze je hodnota null tak v miste volani se rozhodneme jakou hodnotu pouzijeme misto teto prazdne hodnoty. Problem je v tom, ze takovych mist muze byt v aplikaci hned nekolik a je pomerne slozite udrzet vse konzistentni.

// woosms - src/Template/Basic.php
$plugin_settings = [
 'dispatcher' => $settings->load('main:dispatcher') ?? Dispatcher::$default_dispatcher,
 'synchronization' => $settings->load('main:synchronization') ?? 'all',
 'language' => $settings->load('main:language') ?? 'en',
 'language_mutation' => $settings->load('main:language_mutation') ?? false,
 'delete_db' => $settings->load('main:delete_db') ?? false,
 'address_preference' => $settings->load('main:address_preference') ?? 'delivery',
 'marketing_message_opt_in_enabled' => $settings->load('main:marketing_message_opt_in_enabled') ?? OrderForm::DefaultEnabled,
 'marketing_message_opt_in_label' => $settings->load('main:marketing_message_opt_in_label') ?? '',
 'marketing_message_opt_in_default' => $settings->load('main:marketing_message_opt_in_default') ?? false,
 'marketing_message_opt_in_url' => $settings->load('main:marketing_message_opt_in_url') ?? '',
];
// woosms - src/Event/AssetDispatcher.php
if (($settings->load('main:dispatcher') ?? Dispatcher::$default_dispatcher) === Dispatcher::Asset){/**/}

Solution

Nechme primo tridu BulkGate\Plugin\Settings\Settings resit defaultni hodnoty. Potom uz nemusime resit, kde vsude osetrit prazdnou hodnotu.

// src/Settings/Settings.php

public function __construct(Repository\Settings $repository, array $default_settings)
{
  $this->repository = $repository;
  $this->default_settings = $default_settings;
}

V DI by to potom mohlo vypadat nejak nasledovne:

$container['localization.language'] = ['factory' => Settings\Settings::class, 'parameters' => ['default_settings' => [
 'main:dispatcher' => 'asset',
 'main:synchronization' => 'all', 
/*...*/
]]];

Nove uz by tedy vystup vypadal nasledovne:

$settings->load('main:dispatcher'); //asset
$settings->load('main:synchronization'); //all

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions