Chyba v konfiguraci Connection pomocí params v config.neon

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

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)

David Grudl
Nette Core | 8110
+
0
-

Zkus poslední verzi Nette.