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?

Ps
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
VaKvas
Začátečník | 111
+
0
-

V tom NEOMu nemas znacky <?php ?>, ze ne?

nanuqcz
Člen | 822
+
0
-

Jestli nebude problém v tom, že Nette Configurator si pole params vytváří samo. Tenhle config.neon ti jede?

common:
 services:
  database:
   class: NConnection
   arguments: ['%database.driver%:host=%database.host%;dbname=%database.dbname%', %database.username%, %database.password%]


development < common:
 database:
  driver: mysql
  host: localhost
  dbname: DB
  username: USERNAME
  password: PWD
none_
Člen | 16
+
0
-

VaKvas napsal(a):

V tom NEOMu nemas znacky <?php ?>, ze ne?

Ne, samozřejmě, že nemám. Jenom jsem to použil, aby tam bylo zachované formátování

xxxObiWan napsal(a):

Nene, s tímhle byl stejný problém. Pokud tam to params nemám, tak to neprojde ani prvním krokem toho cyklu. Problém je v tom, že is_array() mi vrací false, pokud dostane NArrayHash.

none_
Člen | 16
+
0
-

Koukám, že už mi odpověděl David Grudl ve vláknu, které se mi nějakým zázrakem otevřelo jako duplicitní k tomuhle. Takže odpověď, zatím neozkoušená, je tady