new Context přeruší skript bez zobrazení chyby
- Mihi
- Člen | 2
Chci použít Nette\Database samostatně. Instaluji ho pomocí Composeru. Mám jednoduchý skript viz níže. Chybu nevyhodí žádnou*, echo za …new Context… se již neprovede. Zakomentuji Context, echo se provede. Bez využití Context a při použití $connection->query(neco…)->dump() získám výsledek z DB.
*chybové hlášení jsou nastaveny v .htaccess na php_flag display_errors On, php_value error_reporting 2039. AKTUALIZACE: Pokud je script spouštěný přes cli vrátí chybu Catchable fatal error: Argument 2 passed to Nette\Database\Context::__construct() must be an instance of Nette\Database\IStructure, none given
Napadá někoho jak docílit použití Contextu pro zíkávání dat z DB a díký tomu mít možnost využívat volání table() atd.? Přeci jen je to hlavní důvod proč Nette\Database chci použít.
Composer JSON:
{
„require“: {
„nette/database“: "2.3.*@dev"
}
}
<?php
// include vendors
require __DIR__.'/vendor/autoload.php';
use Nette\Database\Connection,
Nette\Database\Context;
$dsn = 'mysql:host=localhost;dbname=skeleton';
$user = "root";
$password = "root";
$connection = new Connection($dsn, $user, $password);
$database = new Context($connection);
echo "test";
?>
Editoval Mihi (2. 12. 2014 20:32)
- qwerin
- Člen | 25
tenhle problem jsem resil tak
v podstate je zpravna otazka jak v nette database 2.3 predat tride dve pripojeni k DB a vubec jak to naspat do config.neon
dokumentace je momentalene vsude spatne kdyz tvrdi ze new Context ma povinny
jen jeden argument
https://doc.nette.org/cs/database
use Nette\Database\Context;
$database = new Context($connection);
...
nakonec v githubu jsem nasel v testech reseni:
(neni uplne v duchu DI ale co uz kdyz dokumentace mlci)
neon:
default:
dsn: 'XXX'
user: 'XX'
password: 'XXX'
options: [PDO::MYSQL_ATTR_COMPRESS = true]
debugger: true # panel v debugger baru
explain: true # explain dotazů v debugger bar
conventions: discovered # nebo static nebo vaší jméno třídy, výchozí je discovered
autowired: true
interni:
dsn: 'XX'
user: 'XX'
password: 'XX'
options: [PDO::MYSQL_ATTR_COMPRESS = true]
debugger: true # panel v debugger baru
explain: true # explain dotazů v debugger bar
conventions: discovered # nebo static nebo vaší jméno třídy, výchozí je discovered
autowired: false
services:
databaseA: @nette.database.default
databaseB: @nette.database.interni
mysql: Mysql(@databaseA,@databaseB)
class Mysql extends Nette\Object{
public $eshop;
public $interni;
public function __construct( $db, $db2)
{
$cacheStorage = new Nette\Caching\Storages\FileStorage(__DIR__.'/../../temp/tempx');
$structure = new Nette\Database\Structure($db, $cacheStorage);
$conventions = new Nette\Database\Conventions\DiscoveredConventions($structure);
$this->eshop = new Nette\Database\Context($db, $structure, $conventions, $cacheStorage );
$cacheStorage = new Nette\Caching\Storages\FileStorage(__DIR__.'/../../temp/tempy');
$structure = new Nette\Database\Structure($db2, $cacheStorage);
$conventions = new Nette\Database\Conventions\DiscoveredConventions($structure);
$this->interni = new Nette\Database\Context($db2, $structure, $conventions, $cacheStorage );
}
}
- David Matějka
- Moderator | 6445
Jen doplnim, ze metody v connection byly undeprecated, takze je mozno (a asi i doporuceno) pouzivat primo Connection, pokud nas nezajima NDBT