expand proměnných v config.neon
- zarubik
- Člen | 31
Mám problém při expandování vlastní proměnné.
bootsrap.php
$configurator = new Nette\Configurator;
$configurator->container->params['databaseName'] = 'database';
$configurator->loadConfig(__DIR__ . '/config.neon');
config.neon
development < common:
database:
driver: mysql
host: localhost
username: root
database: %databaseName%
Vyhodí chybu Missing item ‚databaseName‘. Když jsem
dumpoval, v případě expandování opravdu není.
Ale pokud proměnnou použiji např. v services, tak deklarovaná je.
Nebo pokud místo %databaseName% napíši %appDir% tak také funguje. Poradíte mi jak jinak definovat proměnnou nebo je chyba v nette?
Nette Framework 2.0-beta (revision 648b258 released on 2011–06–13)
díky :)
Editoval zarubik (21. 6. 2011 18:39)
- washo
- Člen | 88
A je stale zachovana ta vlastnost ze kdyz si definuju treba v indexu konstantu napriklad DATA_DIR tak ze se to dostane do configu jako %dataDir%? Abych to potom mohl napsat do configu
variables:
invoiceDir: %dataDir%/invoices
(s uvozovkama i bez)
protoze me to vyhodi pri pouziti vyjimku: Unable to expand variables: invoiceDir
PHP 5.2.17
Apache/2.2.19 (Win32) PHP/5.2.17
Nette Framework 2.0-beta (revision 926e7fd released on 2011–06–30)
- David Grudl
- Nette Core | 8142
Není. Z důvodů zpětné kompatibility se sice přenášejí konstanty WWW_DIR, APP_DIR, LIBS_DIR a TEMP_DIR, ale i od toho bych rád odešel. Přece jen, je to určitá magie.
Vhodnější by asi bylo dosáhnout stavu, kdy by index.php místo
// absolute filesystem path to the web root
define('WWW_DIR', __DIR__);
// absolute filesystem path to the application root
define('APP_DIR', WWW_DIR . '/../app');
// absolute filesystem path to the temporary files
define('TEMP_DIR', WWW_DIR . '/../temp');
// load bootstrap file
require APP_DIR . '/bootstrap.php';
obsahoval
// absolute filesystem path to the web root
$params['wwwDir'] = __DIR__;
// absolute filesystem path to the application root
$params['appDir'] = realpath(__DIR__ . '/../app');
// absolute filesystem path to the temporary files
$params['tempDir'] = realpath(__DIR__ . '/../temp');
// load bootstrap file
require "$params[appDir]/bootstrap.php";
a poté v bootstrapu by bylo něco jako
$configurator = new Nette\Configurator;
$configurator->container->params += $params;
$container = $configurator->loadConfig(__DIR__ . '/config.neon');
Což by mělo fungovat (jen je třeba specifikovat cestu Debugger::$logDirectory), leč zápisem se mi to vůbec nelíbí. Spíš by se šiklo něco jako:
$container = Nette\Configurator::fromFile($params, '%appDir%/config.neon');
// eventuálně
$container = Nette\Configurator::fromParams($params); // výchozí hodnota '%appDir%/config.neon'
- David Grudl
- Nette Core | 8142
Záleží na tom, jaké cesty a kdo je používá.
logDir nastav přímo třídě Debugger:
Debugger::$logDirectory = ...;
Debugger::enable();
- bojovyletoun
- Člen | 667
nápad na odstranění konstant je dobrý, akorát to zase způsobí problémy s kompatibilitou. Nicméně, já mám v index.php pouze require a zbytek v bootstrapu. V neonu podle mě stačí definovat jen relativní cesty – např pro spojení %appDir%/models/sqlite.db
<?php
use ...;
$libs=__DIR__.'/../../../libs';
require $libs . '/Nette/loader.php';
Debugger::enable(null, __DIR__ . "/log");
$cf=new \Nette\Configurator();
$c = $cf->container;
$c->params['libsDir']=$libs;
$c->params['appDir']=__DIR__;
$c->params['tempDir']=__DIR__.'/temp';
$cf->loadConfig();
$ro = $c->robotLoader;
- David Grudl
- Nette Core | 8142
_Martin_ napsal(a):
Mám to v sekci
common
.
Už rozumím, opraveno v poslední verzi.