Nastavení proměnných napříč aplikací – více modulů

cafesk8
Člen | 103
+
0
-

Zdravím,

mám 2 moduly základní moduly Front/Admin. V obou mám továrničky na formulář, který na Frontu vytváří záznam do DB a v Adminu záznam upravuje. V těchto formulářích mám selecty, kde možné hodnoty naplňuji polem, které je v obou případech totožné. Rád bych se neopakoval a definoval si tyto hodnoty na jednom místě.

Front: app/FrontModule/forms/AddSomethingFormFactory.php

...

	public function create(callable $onSuccess): Form {
		...
			$select_values = [
				'foo' => 'Option 1',
				'boo' => 'Option 2',
				'ffo' => 'Option 3',
				...
			]
			$form->addSelect('something', 'Something', $select_values);

		...
	}

...

Admin: app/AdminModule/forms/EditSomethingFormFactory.php

...

	public function create(callable $onSuccess): Form {
		...
			$default_values = $this->myRepository->findDefaultVals($something_id);
			$select_values = [
				'foo' => 'Option 1',
				'boo' => 'Option 2',
				'ffo' => 'Option 3',
				...
			]
			$form->addSelect('something', 'Something', $select_values)
				->setDefaultValue($default_values['something']);

		...
	}

...

Celé mi to funguje bez problému, ale nelíbí se mi, že opakuji definice pole hodnot, rád bych si je definoval někde jinde a tady si je pouze vložil. Otázkou je, kde by to bylo nejlepší.

Napadlo mě to někde definovat jako CONST – možná v BasePresenteru? Nebo si vytvořit speciální FormFactory, kde bych to definoval a od ní poté dědil napříč moduly? Nebo v config.neon? Do DB mi to příjde jako zbytečnost – zbytečný dotaz navíc. Nebo nějaké „globální“ proměnné?

Díky za každou radu.

duke
Člen | 650
+
+1
-

Z toho, jak to popisuješ, bych řekl, že jde o věc modelu, a tedy že to patří do nějaké modelové třídy, ze které si to pak můžeš vytáhnout v presenteru či v té FormFactory, kterou jsi zmínil. K dispozici by to měla mít také služba, která je zodpovědná za uložení záznamu do databáze, neboť by měla kontrolovat, zda se ukládají přípustné hodnoty (já vím, že Form si to kontroluje také, ale třeba to budeš chtít někdy vytvářet/editovat i bez formuláře).

Editoval duke (12. 10. 2018 11:43)

MajklNajt
Člen | 470
+
+1
-

Ahoj, mohol by si si napríklad vytvoriť jednoduchú servisu (ktorá vôbec nemusí dáta ťahať z DB, budeš ich tam mať iba fixne zadefinované v poli), ktorú si predáš cez constructor/injectuješ tam, kde budeš potrebovať.

GEpic
Člen | 562
+
+2
-

MajklNajt napsal(a):

Ahoj, mohol by si si napríklad vytvoriť jednoduchú servisu (ktorá vôbec nemusí dáta ťahať z DB, budeš ich tam mať iba fixne zadefinované v poli), ktorú si predáš cez constructor/injectuješ tam, kde budeš potrebovať.

Pokud budou fixní (statické), nemusí si je předávat vůbec a stačí si je prostě zavolat.

	class MyClass
	{
		public static function getSelectValues(): array
		{
			return [
				'foo' => 'Option 1',
'boo' => 'Option 2',
'ffo' => 'Option 3'
			]
		}
	}


	// a statické volání
	MyClass::getSelectValues();

Statickými třídami lze definovat tzv. helper classes, obsahující např. daňové sazby, různé další číselníky, apod.

Editoval GEpic (12. 10. 2018 23:08)