Práce s konstantami v rámci NEONu a DI rozšíření
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Bilbo
- Člen | 16
Ahoj, řeším takový problém, možná už to někde bylo adresováno,
v tom případě se omlouvám.
Chtěl bych v rámci DI rozšíření v NEONu pracovat
s konstantami tříd.
Př.:
localization:
messages:
pairs:
FOO:
Some\Class::CONSTANT: Hodnota
Some\Class::CONSTANT2: Hodnota2
No a teď bych nějak chtěl, aby výstup v kontejneru zachoval konstanty,
je to nějak možné? Klidně si tam napíšu nějaké zpracování sám, jenom
nevím jak.
Momentálně uvnitř rozšíření dělám něco ve stylu:
protected static function parseContantsInMessages(array & $messages)
{
foreach ($messages as $key => &$value) {
if (self::isConstant($value)) {
$value = constant($value);
}
if (self::isConstant($key)) {
$messages[constant($key)] = $value;
unset($messages[$key]);
}
if (is_array($value)) {
self::parseContantsInMessages($value);
}
}
}
Výstup z tohoto parsování si pak vložím do servisy:
$builder->addDefinition($this->prefix('messages'))
->setClass('Localization\Messages')
->setArguments([$translator, $config->messages]);
Takže v kontejneru mám něco typu:
'pairs' => array(
'FOO' => array(3 => 'Hodnota', 6 => 'Hodnota2'),
),
Líbilo by se mi ale víc, kdybych tam místo hodnot mohl mít normálně konstanty. Dá se to nějak chytře udělat? Díky moc!