Bootstrap je „nekomutativní“ ⇒ není to chyba?

- smi
 - Člen | 75
 
Problém v 2.0 Beta
Mám config.ini ve tvaru:
[common]
; PHP configuration
php.date.timezone = "Europe/Prague"
services.robotLoader.option.directory[] = %appDir%
services.robotLoader.option.directory[] = %libsDir%
services.robotLoader.run = TRUE
services.authenticator = Uzivatele
services.authorizator  = Acl
popisky.Subjekt = "SEKK"
tabulky.Uzivatele   = Ency_Uzivatele
tabulky.Log         = Ency_Log
tabulky.Logs        = Ency_Log
[production < common]
db.server = localhost
db.database =
db.username =
db.password =
db.driver = mysql
db.charset = utf8
db.lazy = TRUE
[development < common]
db.server = localhost
db.database =
db.username =
db.password =
db.driver = mysql
db.charset = utf8
db.lazy = TRUE
Když použiju bootstrap podle sandboxu
use Nette\Diagnostics\Debugger,
	Nette\Application\Routers\SimpleRouter,
	Nette\Application\Routers\Route;
// Load Nette Framework
// this allows load Nette Framework classes automatically so that
// you don't have to litter your code with 'require' statements
require LIBS_DIR . '/Nette/loader.php';
// Enable Nette\Debug for error visualisation & logging
Debugger::$strictMode = TRUE;
Debugger::enable();
// Load configuration from config.neon file
$configurator = new Nette\Configurator;
$configurator->loadConfig(__DIR__ . '/config.ini');
// Configure application
Debugger::dump(\Nette\Environment::getContext()->params);
die();
$application = $configurator->container->application;
$application->errorPresenter = 'Error';
//$application->catchExceptions = TRUE;
// Setup router
...
tak dostanu
Nette\ArrayHash(5) {
   "appDir" => "D:\Php\Projekty\Enclabmed.cz\app" (32)
   "libsDir" => "D:\Php\Projekty\Enclabmed.cz\libs" (33)
   "tempDir" => "D:\Php\Projekty\Enclabmed.cz\temp" (33)
   "productionMode" => FALSE
   "consoleMode" => FALSE
}
Jestliže, ale prohodím řádky
use Nette\Diagnostics\Debugger,
	Nette\Application\Routers\SimpleRouter,
	Nette\Application\Routers\Route;
// Load Nette Framework
// this allows load Nette Framework classes automatically so that
// you don't have to litter your code with 'require' statements
require LIBS_DIR . '/Nette/loader.php';
// Load configuration from config.neon file
$configurator = new Nette\Configurator;
$configurator->loadConfig(__DIR__ . '/config.ini');
// Enable Nette\Debug for error visualisation & logging
Debugger::$strictMode = TRUE;
Debugger::enable();
// Configure application
Debugger::dump(\Nette\Environment::getContext()->params);
die();
$application = $configurator->container->application;
$application->errorPresenter = 'Error';
//$application->catchExceptions = TRUE;
// Setup router
dostanu (což chci a čekám)
Nette\ArrayHash(12) {
   "appDir" => "D:\Php\Projekty\Enclabmed.cz\app" (32)
   "libsDir" => "D:\Php\Projekty\Enclabmed.cz\libs" (33)
   "tempDir" => "D:\Php\Projekty\Enclabmed.cz\temp" (33)
   "productionMode" => FALSE
   "consoleMode" => FALSE
   "popisky" => Nette\ArrayHash(1) {
      "Subjekt" => "SEKK" (4)
   }
   "tabulky" => Nette\ArrayHash(3) {
      "Uzivatele" => "Ency_Uzivatele" (14)
      "Log" => "Ency_Log" (8)
      "Logs" => "Ency_Log" (8)
   }
}
Není to chyba v Nette?

- bojovyletoun
 - Člen | 668
 
Taky jsi nám mohl prozradit, kteréž řádky jsi prohodil a ušetřit 5 minut hledání.
Chyba je v tom, že ty si vytvoříš Configurator(který o Environmentu
nemusí vědět) a potom v aplikaci používáš Environment. Buď používej
Environment::getConfigurator()(což je deprecated,
Environment bude zničen) a nebo místo
\Nette\Environment::getContext()->params používej
container – v tomto místě $configurator->context ,jinde
třeba $this->context
podrobně zde https://forum.nette.org/…r-vraci-null

- smi
 - Člen | 75
 
bojovyletoun napsal(a):
Taky jsi nám mohl prozradit, kteréž řádky jsi prohodil a ušetřit 5 minut hledání.
Chyba je v tom, že ty si vytvoříš Configurator(který o Environmentu nemusí vědět) a potom v aplikaci používáš Environment. Buď používej
Environment::getConfigurator()(což je deprecated, Environment bude zničen) a nebo místo\Nette\Environment::getContext()->paramspoužívej container – v tomto místě$configurator->context,jinde třeba $this->contextpodrobně zde https://forum.nette.org/…r-vraci-null
Tady je problém v modelech, kde si potřebuji dotáhnout údaje a nelze je vzít z prezenteru. (V construktoru si je v případě autentizace a autorizace neumím podat – nevím, kde se modely volají)
Za ty neoznačené řádky se omlouvám.
Editoval smi (7. 6. 2011 13:45)

- Teyras
 - Člen | 81
 
Pokud to chceš prostě nějak vyřešit, přidej si do boostrapu ještě
<?php
Environment::setConfigurator($configurator);
Environment::setContext($configurator->container);
?>
Samozřejmě asi nemusím zdůrazňovat, že je to prasárna :) Jak už se tu psalo, problém je v tom, že Debug si „inicializuje“ Environment…