Kdyby\Doctrine Jak dostat konstantu z config.neon do entity

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lvq
Člen | 47
+
0
-

Potřeboval bych nějak dostat konstantu z config.neon do entity.
Napadlo mě zaregistrovat entitu jako službu a poté ji tam dostat přes postLoad event a zároveň si napojit nějakou událost na konstruktor a tím bych pokryl možnosti, když si entitu vytvářím sám i když se načítá z db a vytváří ji entityManager. Ale moc se mně to řešení nelíbí.
Obecně by se dal ten dotaz zobecnit na to, jak dostat konstantu/službu do entity.

Ještě dodám, co je cílem: v db mám nějaké zakryptované řetězce a potřebuji v getteru znát šifrovací klíč, protože chci předat informaci již odkryptovanou.

jiri.pudil
Nette Blogger | 1032
+
+8
-

Osobně bych potřebné věci entitě předával až ve chvíli, kdy jsou opravdu potřebné, tj. pokud „potřebuji v getteru znát šifrovací klíč“, předám si ho do getteru:

class Entity
{
	public function getDecryptedValue(string $encryptionKey)
	{
		return openssl_decrypt(...);
	}
}

// $encryptionKey získám přes DI
$entity->getDecryptedValue($encryptionKey);

A ještě lépe nejdřív vytáhnu šifrovací logiku ven, abych neměl v entitě skrytou závislost na použitém algoritmu, a mohl ho tak snadněji vyměnit za silnější, pokud to někdy bude nutné:

class Entity
{
	public function getDecryptedValue(EncryptionHandlerInterface $encryption)
	{
		return $encryption->decrypt($this->encryptedValue);
	}
}

// $encryption získám přes DI
$entity->getDecryptedValue($encryption);
parameters:
	encryptionKey: ...

services:
	- OpensslEncryptionHandler(%encryptionKey%)
lvq
Člen | 47
+
0
-

@jiri.pudil Díky, to se mně celkem líbí, určitě je to lepší než řešení, než to, co napadlo mě :-)