Spojení Nette 2.3.2 s Dibi 2.3.2

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

Ahoj,
snažil jsem se spojit Dibi s Nette (sendbox) podle návodu
nahrál jsem Dibi do složky Vendor

Registroval službu a nastavil DB

config.neon

services:
	connection:
		class: DibiConnection(%database%)

config.local.neon

database:
	dsn: 'mysql:host=127.0.0.1;dbname=test'
	user:
	password:
	options:
		lazy: yes

Do bootstrap.php dal

$configurator->onCompile[] = function ($configurator, $compiler) {
    $compiler->addExtension('dibi', new Dibi\Bridges\Nette\DibiExtension22);
};

Ale samozřejmě mi třídu „DibiExtension22“ nemůže najít,
prosím vás, ví někdo, jak na to? Moc díky

Editoval Wailey (11. 5. 2015 12:07)

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

nahrál jsem Dibi do složky Vendor

Definuj nahrál. Použil si composer?

Wailey
Člen | 48
+
0
-

To bude nejspíše ta věc, proč to nefunguje, nepoužil, jak na něj? nemám s ním v Nette moc skušenosti

Pavel Kravčík
Člen | 1182
+
+1
-

Návod Nette
Návod Netbeans

Jde o to, že vendor má autoload z Composeru, takže pokud to nenahraješ přes Composer, tak neuvidíš, protože RobotLoader vendor ignoruje.

Editoval kzk_cz (11. 5. 2015 12:33)

Oli
Člen | 1215
+
+2
-

Druhá možnost je vytvořit si nějakou libs složku a nahrát to tam. Do bootstrapu potom už jen vložíš

$robotLoader->addDirectory(__DIR__ . '/../libs');

Ale otázka zní, proč by to někdo vůbec dělal, když může využít composer? :-)

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

@Oli: O takových možnostech bych mlčel. :D Nebo si tam budou lidi dávat rovnou vendor. :)

Šaman
Člen | 2635
+
+4
-

kzk_cz napsal(a):

@Oli: O takových možnostech bych mlčel. :D Nebo si tam budou lidi dávat rovnou vendor. :)

Já bych o tom nemlčel. Knihovny, pro které není composer balíček, se právě tímto způsobem přidávají. Takže je dobré vědět, že buď nakopírovat do adresáře /libs, který se přidá pod správu robotLoadera, nebo pomocí composeru do /vendor (a nikdy ne kopírovat tam něco ručně).

No a druhá věc je, že Dibi má balíček, takže je velmi důrazně doporučeno použít composer.

Milo
Nette Core | 1283
+
+7
-

@Wailey

  1. Nainstaluj dibi
cd /projekt/
composer require dibi/dibi v2.3.2
  1. Zaregistruj dibi extension do DI kontejneru v sekci extensions
# config.neon
extensions:
	dibi: Dibi\Bridges\Nette\DibiExtension22
	# tahle extenžna přidá do kontejneru službu @dibi.connection (to je instance \DibiConnection)
  1. Nakonfiguruj extenžnu
# config.neon
dibi:
	driver: postgre
	port: 5433
	database: test
	username: 'user'
	password: 'heslo'
	lazy: TRUE
  1. Vyžaduj DibiConnection
# app/model/DataSource.php
namespace App\Model;

class DataSource
{
	function __construct(\DibiConnection $db)
	{
	}
}
# config.neon
services:
	# Automaticky, kontejner ví kde vzít parametr konstruktoru
	- App\Model\DataSource
	# nebo ručně
	- App\Model\DataSource(@dibi.connection)
David Matějka
Moderator | 6445
+
0
-

@kuty.cz asi bych registrovat 2 extension a pro druhy vypnul autowiring:

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

services:
	dibi2.connection:
		autowired: false
kuty.cz
Člen | 33
+
0
-

Když už jsme u toho, jak při využití této extension si vytvořit i druhé připojení k jinému serveru? Samozřejmě ho nechci mít autowired, jen konkretní službě chci dát jiné připojení.

kuty.cz
Člen | 33
+
0
-

Díky, jsem psal rychleji než jsem myslel a už jsem to takhle i vyzkoušel.. :-)

Ale ono se to určitě bude hodit i někomu jinému.

David Matějka napsal(a):

@kuty.cz asi bych registrovat 2 extension a pro druhy vypnul autowiring:

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

services:
	dibi2.connection:
		autowired: false
David Grudl
Nette Core | 8143
+
+1
-

Autowiring se dá vypnout přímo v sekci dibi (od poslední verze):

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

dibi:
	driver: ...

dibi2:
	...
	autowired: false
Milo
Nette Core | 1283
+
+1
-

Jj. Pro úplnost, moje best practice konfigurace jak ji teď používám. Šlape to bezvadně:

# config.neon
parameters:
	databases:
		application:
			username:  # set in config.local.neon
			password:  # set in config.local.neon

		students:
			username:  # set in config.local.neon
			password:  # set in config.local.neon

		schedules:
			username:  # set in config.local.neon
			password:  # set in config.local.neon

		riv:
			username:  # set in config.local.neon
			password:  # set in config.local.neon

services:
	# External data sources
	- App\Model\Students(@dibi.students.connection)
	- App\Model\Schedules(@dibi.schedules.connection)
	- App\Model\Riv(@dibi.riv.connection)

extensions:
	dibi.application: Dibi\Bridges\Nette\DibiExtension22
	dibi.students: Dibi\Bridges\Nette\DibiExtension22
	dibi.schedules: Dibi\Bridges\Nette\DibiExtension22
	dibi.riv: Dibi\Bridges\Nette\DibiExtension22

dibi.application:
	driver: postgre
	port: 5433
	database: xxxxx
	username: %databases.application.username%
	password: %databases.application.password%
	lazy: TRUE

dibi.students:
	autowired: no
	driver: oracle
	database: "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = x.x.x.x)(PORT = 1529)))(CONNECT_DATA = (SID = x)))"
	username: %databases.students.username%
	password: %databases.students.password%
	charset: UTF8
	lazy: TRUE

dibi.schedules:
	autowired: no
	driver: oracle
	database: "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = y.y.y.y)(PORT = 1529)))(CONNECT_DATA = (SID = y)))"
	username: %databases.schedules.username%
	password: %databases.schedules.password%
	charset: UTF8
	lazy: TRUE

dibi.riv:
	autowired: no
	driver: oracle
	database: "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = z.z.z.z)(PORT = 1529)))(CONNECT_DATA = (SID = z)))"
	username: %databases.riv.username%
	password: %databases.riv.password%
	charset: UTF8
	lazy: TRUE