Jak se z presenteru dostat k hodnote Configuratoru

markoska
Člen | 12
+
0
-

Predem se omlouvam za zacatecnicky dotaz, ale verte, ze se na nej uz hodinu snazim najit odpoved…

V souboru app/Bootstrap.php mam nastaveno:

$configurator->setDebugMode(true);

Jak se k teto hodnote dostat v presenteru? Potreboval bych jednu akci podminit tim, jestli aplikace bezi ve vyvojovem nebo produkcnim rezimu. Kdyz zkousim dat:

public function renderDefault(): void
{
    $conf = new Nette\Bootstrap\Configurator();
    if ($conf->isDebugMode() === true) {
        $this->template->debug = "jo";
    } else {
        $this->template->debug = "ne";
    }
}

Tak mi to vraci, ze ve vyvojovem rezimu nejsem.

Diky za vasi trpelivost ;)

galab
Backer | 74
+
0
-

Není to teda z configu, ale můžeš si to ověřit u tracy

if(\Tracy\Debugger::$productionMode === true) {
    ...
} else {
    ...
};

Editoval galab (8. 2. 23:00)

Marek Bartoš
Nette Blogger | 718
+
+2
-

Informace o debug módu je v parametru %debugMode%

V presenteru se k hodnotě dostaneš tak, že si presenter manuálně zaregistruješ do služeb a službě parametr předáš.

services:
	- App\Presenters\ExamplePresenter(%debugMode%)
namespace App\Presenters;

class ExamplePresenter extends \Nette\Application\UI\Presenter
{
	private bool $debugMode;

	public function __construct(bool $debugMode)
	{
		$this->debugMode = $debugMode;
	}

	public function renderDefault(): void
	{
    	if ($this->debugMode) {
        	$this->template->debug = "jo";
    	} else {
        	$this->template->debug = "ne";
    	}
	}
}
David Grudl
Nette Core | 7780
+
+5
-

Úplně nejjednodušší způsob jak si cokoliv předávat z konfigu. Vytvoř si takovouto třídu:

<?php
namespace App;

class Config
{
	public function __construct(...$args)
	{
		\Nette\Utils\Arrays::toObject($args, $this);
	}
}

A teď si do konfigu (např. soubor common.neon) předej jakékoliv data následujícím způsobem:


services:
	- App\Config(
		nazevProjektu: abc
		nejakaHodnota: 123
		debugMode: %debugMode%
	)

V proměnné debugMode bude aktuální stav debug režimu.

No a nakonec v presenteru, kde budu chtít mít přístup k údajům, přidám tímto způsobem proměnnou $config.

final class HomepagePresenter extends Nette\Application\UI\Presenter
{
	/** @inject */
	public \App\Config $config;

Lze ji zapsat i do společného předka, ze kterého ostatní presentery dědí, a pak data budou k dispozici všude.

A data lze číst pomocí $this->config->debugMode.