persistentní parametr v config.neon

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

Dá se nějakým způsobem dostat k persistentní proměnné v config.neon? Potřeboval bych si některým službám automaticky předávat informaci o jayzkové verzi (public $lang) z BasePresenteru.

Jan Tvrdík
Nette guru | 2595
+
0
-

Ne.

norbe
Backer | 405
+
0
-

Dá se to řešit vytvořením třídy, která ten parametr obaluje. Tu si pak zaregistruješ jako službu a můžeš ji předat jako závislost. Nastavení můžeš provést například v presenteru v metodě startup…

Ivorius
Nette Blogger | 119
+
0
-

To je dobrý nápad. Mám takovou teoretickou otázku: je lepší to narvat všechno do jedné přepravky – něco jako Config nebo se to snažíte nějak logicky seskupovat (popřípadě individuálně) ? Ono toho moc nebude, v podstatě mě zatím napadá jen ten jazyk (ale abych netahal piáno) :)

Majkl578
Moderator | 1364
+
0
-

Možná by bylo lepší na presenter a persistentní proměnnou rezignovat (ona tam sice bude, ale z pohledu modelové vrstvy je to nezajímavá informace) a řešit to třeba takto: https://github.com/…Resolver.php

Filip Procházka
Moderator | 4668
+
0
-

Nebo ještě lépe, rovnou přejít na Kdyby/Translator, který to řeší (viz Majkl) :)

akadlec
Člen | 1326
+
0
-

No tady bych si troufl tvrdit že to Kdyby/Translator moc neřeší. Co když chceš ten jazyk dostat do služby aby podle toho nastavila své chování? Třeba Gedmo/Translatable

Filip Procházka
Moderator | 4668
+
0
-

Správné řešení je záviset na translatoru, protože jazyk se může v průběhu života aplikace měnit.

namespace MyApp;

class TranslatableListener extends \Gedmo\Translatable\TranslatableListener
	implements \Kdyby\Events\Subscriber
{
	private $translator;


	public function __construct(Kdyby\Translation\Translator $translator)
	{
		$this->translator = $translator;
	}


	public function getSubscribedEvents()
	{
		return array_merge(parent::getSubscribedEvents(), array(
			'Nette\Application\Application::onRequest'
		));
	}

	/**
	 * Tenhle event se logicky musí volat až po tom v translatoru,
	 * mělo by to ovlivnit pořadí registrace v configu a případně je možné použít váhy
	 * https://github.com/Kdyby/Events/blob/master/docs/en/index.md#listener-priorities
	 */
	public function onRequest($app, $request)
	{
		$this->setTranslatableLocale($this->translator->getLocale());
	}

	public function getListenerLocale()
	{
		return $this->translator->getLocale();
	}

}