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 | 667
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()->params
použí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…