Co všechno za „magii“ se provádí při vytvoření Connection?
- thunderbuff
- Člen | 164
Ve své aplikaci se připojuji k vícero databázím, jejich konfiguraci tahám z jiného zdroje, než config.php. Jednotlivá připojení vytvářím přes
<?php
$connection = new Nette\Database\Connection(...)
?>
Rád bych, aby nová připojení měla nachlup stejné vlastnosti, jako to „defaultně zabudované“. Co všechno se provádí při vytváření originálního Connection, registrovaného v configu?
- thunderbuff
- Člen | 164
Díky za doporučení. Zatím mám tohle:
<?php
$connection = new Connection($dsn, $user, $password)
$panel = new \Nette\Database\Diagnostics\ConnectionPanel;
Debugger::$bar->addPanel($panel);
$connection->onQuery[] = callback($panel, 'logQuery');
$connection->setCacheStorage($this->storage); // služba @cacheStorage
Nette\Diagnostics\Debugger::$blueScreen->addPanel(array('Nette\Database\Diagnostics\ConnectionPanel::renderException'));
?>
jen jak vyrobit reflexi mi zatím uniká :-)
- thunderbuff
- Člen | 164
HosipLan napsal(a):
A proč to děláš „ručně“, když to za tebe může udělat Nette?
Mám jednu „běžnou“ nette databázi. Pak mám desítky dalších databází, jejich konfigurace je uložená v tabulce v té „běžné“ databázi. Jelikož je jich opravdu hodně a jejich konfigurce se často mění, není možné udržovat je v configu, proto potřebuji takovéhle nehezké řešení.
- thunderbuff
- Člen | 164
Díky všem za tipy, finální verze vypadá takto:
<?php
$connection = $this->new Connection($dsn, $u, $p)
$panel = new \Nette\Database\Diagnostics\ConnectionPanel;
Debugger::$bar->addPanel($panel);
$connection->onQuery[] = callback($panel, 'logQuery');
$connection->setCacheStorage($this->storage);
$connection->setDatabaseReflection(new \Nette\Database\Reflection\ConventionalReflection());
$this->connections[$connectionName] = $connection;
?>
Editoval thunderbuff (8. 10. 2012 19:16)
- thunderbuff
- Člen | 164
Výše zmíněný kód neloguje v produkčním módu databázové chyby, ale v development funguje. Nevíte, čím by to mohlo být?
- thunderbuff
- Člen | 164
hrach napsal(a):
Co znamena neloguje???
To znamená, že pokud dojde k nějaké chybě (např kolize cizího klíče), tak se nevytvoří žádný záznam v error logu, ani se neuloží html soubor s exception. Přikládám bootstrap:
<?php
define ("DEVELOPMENT", 0);
use Nette\Application\Routers\Route;
use Nette\Diagnostics\Debugger;
use Nette\Forms\Container;
// Load Nette Framework
require LIBS_DIR . '/Nette/loader.php';
// Configure application
$configurator = new Nette\Config\Configurator;
// Enable Nette Debugger for error visualisation & logging
if (DEVELOPMENT) {
$configurator->setDebugMode(true);
}
else {
$configurator->setDebugMode(false);
}
define('LOGS_DIR', APP_DIR . '/../log');
$configurator->enableDebugger(LOGS_DIR);
// Enable RobotLoader - this will load all classes automatically
if (!is_dir(__DIR__ . '/../temp/' . APP_INSTANCE)) {
mkdir(__DIR__ . '/../temp/' . APP_INSTANCE);
}
$configurator->setTempDirectory(__DIR__ . '/../temp/' . APP_INSTANCE);
$configurator->createRobotLoader()
->addDirectory(APP_DIR)
->addDirectory(LIBS_DIR)
->register();
Debugger::timer();
Debugger::$bar->addPanel(new \NetteExtras\XDebugHelper('phpstorm'));
// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . '/config/config_' . APP_INSTANCE . '.neon');
$container = $configurator->createContainer();
// Setup router
$container->router[] = new Route('index.php', 'Welcome:Dashboard:Default', Route::ONE_WAY);
$container->router[] = new Route('<module>/<presenter>/<action>[/<id>]', array(
'module' => 'Welcome',
'presenter' => 'Dashboard',
'action' => 'Default',
'id' => null,
));
// Configure and run the application!
$container->application->errorPresenter = 'Error';
$container->application->run();
?>
Editoval thunderbuff (9. 10. 2012 0:43)