Dibi is not connected to database

marcelxy
Člen | 70
+
0
-

Zdravím,
snažím se přejít z nette 2.4 na 3.0
app je postavena na dibi ale v nette 3.0 se nemůžu připojit k databázi a nevím proč?
vše co potřebuje má?

DIC:
dibi.connection	yes	Dibi\Connection
dibi.panel	yes	Dibi\Bridges\Tracy\Panel

dibi =>
host => "127.0.0.1" (9)
username => "root" (4)
password => "tajneheslo" (5)
database => "mojedb" (6)
lazy => true

conf:

extensions:
	dibi: Dibi\Bridges\Nette\DibiExtension22

vyhazuje:
Dibi\Exception
Dibi is not connected to database

jak mužu zjistit proč se tam nemuže připojit? přihlašovací udaje mám správné!
diky za radu?

Editoval marcelxy (5. 1. 2021 18:52)

marcelxy
Člen | 70
+
0
-

Prosim o radu?
prisel jsem na to ze dibi nama prihlasovaci udaje k db z local.neon

parameters:
    dibi:
		host: 127.0.0.1
		username: root
		password: ***
		database: viewer
		lazy: TRUE

toto je vipis z ladenky on ty udaje ma prazdne a nevim proc?

.../dibi/src/Dibi/Drivers/MySqliDriver.php:98   mysqli->real_connect()

 88:                        $this->connection->options($key, $value);
 89:                    }
 90:                }
 91:                @$this->connection->real_connect( // intentionally @
 92:                    (empty($config['persistent']) ? '' : 'p:') . $config['host'],
 93:                    $config['username'],
 94:                    $config['password'] ?? '',
 95:                    $config['database'] ?? '',
 96:                    $config['port'] ?? 0,
 97:                    $config['socket'],
 98:                    $config['flags'] ?? 0
 99:                );
100:
101:                if ($this->connection->connect_errno) {
102:                    throw new Dibi\DriverException($this->connection->connect_error, $this->connection->connect_errno);
$host
""
tady jsou argumenty ale prazdne! nevim proc?
$user	null
$password	"*****" (5)
$database	""
$port	0
$socket	"/var/lib/mysql/mysql.sock" (25)
$flags	0

v common.neon mam

extensions:
	dibi: Dibi\Bridges\Nette\DibiExtension22

a ten nacte jen mu chybi precist si prihlasovaci udaje z local.neon nacteny ho ma
akorat nevim proc nepouzije z neho ty prohlasovaci udaje?
diky moc za rady

Editoval marcelxy (5. 1. 2021 18:55)

David Matějka
Moderator | 6445
+
0
-

a konfigurujes to dibi? ze sekce parameters se to automaticky nepreda, musis tam mit minimalne jeste neco jako

dibi: %dibi%

pripadne to v te sekci dibi nakonfigurovat primo

IJVo
Člen | 39
+
0
-

Myslím, že to máš špatně. Nemůže to být v sekci parameters.

Návod je zde: https://dibiphp.com/…ocumentation -na konci je část „Připojení do Nette“.
Snad ti to pomůže.

marcelxy
Člen | 70
+
0
-

aha diky to jsem z dokumentace nepochopil!

marcelxy
Člen | 70
+
0
-

jeste bych potreboval radu,
uz se to zlepsilo pres

/** @var Dibi\Connection @inject */
public $database;

mi to spojeni preda ale pouze za pouziti „use Dibi“; bez toho ne!
ala ja potrebuji pouzivat jiny zapis
ne tento

$this->database->select('*')atd..

ale tento, je tak napsana cela app a nechce se mi to cele prepisovat

\dibi::select('*')atd..

a v tomto pripade porad hlasi ze nema spojeni z db.
jak mu mam predat tu sluzbu dibi abych mohl pouzivat jeho staticke metody ?
diky za rady.

Pavel Kravčík
Člen | 1196
+
0
-

Když máš dobré IDE, tak je záležitost pěti sekund. ;) Hromadné nahrazení.

David Matějka
Moderator | 6445
+
+1
-

@PavelKravčík a hromadné předání závislostí? :)

nejsnažší bude nastavit to spojení z DI do statického dibi::setConnection

buď někde v indexu/bootstrapu nebo by to mělo jít i úpravou setup konfigurace toho dibi connection

Pavel Kravčík
Člen | 1196
+
0
-

@DavidMatějka Teoreticky by stačilo vložit nějakého předka alá BasePresenter, dle anotace předpokládám, že je celá logika v presenterech. Takže by stačilo dvě hromadné nahrazení. Jen jsem chtěl nabídnout alternativní řešení. ;)

kralik
Člen | 230
+
0
-

Ahoj,
rád bych se zeptal jak připojit přes Dibi dvě různé DB.
Mám dva moduly a každý by měl své připojení Dibi do ruzných databází.

common.neon

serveces:
...
- App\Model\Firebird(@dibi.connection)
...


extensions:
..
	dibi: Dibi\Bridges\Nette\DibiExtension22

dibi:
	driver: firebird
    port: 3055
	database: server1/3055:C:\Data\data\data.FDB
		username: 'uzivatel'
		password: 'heslo'
		lazy: TRUE

Toto mi funguje, ale jak připojit druhý model s jinou db přes Dibi

Myslel jsem něco takového

common.neon

serveces:
...
- App\Model\Firebird(@dibi.firebird.connection)
- App\Model\Mssql(@dibi.mssql.connection)
...

dibi:
	firebird:
		driver: firebird
	    port: 3055
		database: server1/3055:C:\Data\data\data.FDB
			username: 'uzivatel'
			password: 'heslo'
			lazy: TRUE
	mssql:
		dsn: 'sqlsrv:Server=srv1\SRV1;Database=DW'
		user: 'uzivatel'
		password: 'heslo'

Ale to dělám špatně, to mi nefunguje.

Prosím o radu jak na to.
Hledal jsem v dokumentaci, ale ni nenašel.

David Matějka
Moderator | 6445
+
+1
-

@kralik priste radeji zaloz nove tema

dibi extension vice connection nepodporuje, ale nemel by byt problem registrovat extension vicekrat s tim, ze u druheho vypnes autowiring:

extensions:
	dibiFirebird: Dibi\Bridges\Nette\DibiExtension22
	dibiMssql: Dibi\Bridges\Nette\DibiExtension22
dibiFirebird:
	...
dibiMssql:
	...
	autowired: false
services:
	- App\Model\Firebird(@dibiFirebird.connection)
marcelxy
Člen | 70
+
0
-

aha diky za rady!
nakonec jsem to vyresil takhle do bootsrapu pred return
jsem dal toto a jedeto

$container = $configurator->createContainer();
$connection = dibi::connect($container->parameters['dibi']);

ale ted v tracy mam 2 DIC kontejnery coz je asi zase spatne?
no asi to bude jednoduchsi to prepsat v IDE na

$this->conection->select('*')...

ale ja to bral jako challenge vramci vyuky, myslel jsem ze to nejak jde vyresit bez prepsani.
ale prepsat to bude asi ta spravna cesta?

kralik
Člen | 230
+
0
-

David Matějka napsal(a):

@kralik priste radeji zaloz nove tema

dibi extension vice connection nepodporuje, ale nemel by byt problem registrovat extension vicekrat s tim, ze u druheho vypnes autowiring:

extensions:
	dibiFirebird: Dibi\Bridges\Nette\DibiExtension22
	dibiMssql: Dibi\Bridges\Nette\DibiExtension22
dibiFirebird:
	...
dibiMssql:
	...
	autowired: false
services:
	- App\Model\Firebird(@dibiFirebird.connection)

Super, funguje skvěle.

Díky moc