Chyba v konfiguraci Connection pomocí params v config.neon
- none_
- Člen | 16
Pracuju s Nette2.0 a nejspíš jsem narazil na chybu. Pokud mám v config.neon takovouto konfiguraci:
<?php
common:
services:
database:
class: NConnection
arguments: ['%params.database.driver%:host=%params.database.host%;dbname=%params.database.dbname%', %params.database.username%, %params.database.password%]
development < common:
params:
database:
driver: mysql
host: localhost
dbname: DB
username: USERNAME
password: PWD
?>
Nepodaří se mi vytvořit objekt Connection. Proces končí s exception InvalidArgumentException Missing item ‚database‘. S největší pravděpodobností jsem objevil, kde je problém. Během parsování souboru se dojde do stavu, kdy mám klíč
<?php
array(3) ˇ [
0 => "params" (6)
1 => "database" (8)
2 => "driver" (6)
]
?>
a pole:
<?php
array(7) ˇ {
"wwwDir" => "D:\web\muzikanti\www" (20)
"appDir" => "D:\web\muzikanti\app" (20)
"libsDir" => "D:\web\muzikanti\libs" (21)
"tempDir" => "D:\web\muzikanti\temp" (21)
"productionMode" => FALSE
"consoleMode" => FALSE
"params" => NArrayHash(1) ˇ {
"database" => NArrayHash(5) ˇ {
"driver" => "mysql" (5)
"host" => "localhost" (9)
"dbname" => "DB" (2)
"username" => "USERNAME" (8)
"password" => "PWD" (3)
}
}
}
?>
V tomto kroku se spustí medota NArrays::get()
. Problém
nastane na jejím druhém řádku
<?php
public static function get(array $arr, $key, $default = NULL)
{
foreach (is_array($key) ? $key : array($key) as $k) {
if (is_array($arr) && array_key_exists($k, $arr)) {
$arr = $arr[$k];
} else {
if (func_num_args() < 3) {
throw new InvalidArgumentException("Missing item '$k'.");
}
return $default;
}
}
return $arr;
}
?>
, v druhém průběhu cyklu při ověření is_array()
. Tato
funkce vrátí false a proto celý proces končí vyjímkou. Pokud vyhodím
ověření is_array()
a prostě věřím, že dostanu dobrá data,
tak volání fce skončí úspěšně.
Mám někde chybu nebo jste se někdo setkal s podobným problémem?
- Nette Framework 2.0-beta (revision 648b258 released on 2011–06–13)
- Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.2.11
Omlouvá se za duplicitní vlákno. Předchozí nějak spadlo…
Ps: zapomněl jsem dodat, že podle mě je problém v tom, že pole vzniklé
z konfiguračního souboru obsahuje z nějakého důvodu místo obyčejného
array objekt NArrayHash.
Editoval none_ (19. 7. 2011 4:14)