new Context přeruší skript bez zobrazení chyby

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

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)

Mihi
Člen | 2
+
0
-

Při použití poslední stabilní verze nette/database 2.2.3 se problém neobjevuje. Do doby než bude stabilní verze 2.3.* doporučuji tedy používat verzi 2.2.3.
Composer JSON:
{
„require“: {
„nette/database“: „2.2.3“
 }
}

qwerin
Člen | 25
+
+2
-

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
+
+1
-

Jen doplnim, ze metody v connection byly undeprecated, takze je mozno (a asi i doporuceno) pouzivat primo Connection, pokud nas nezajima NDBT