Přepínání jazyků a přepínání DB

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

Zdravím, měl bych dvě otázky.

  1. Mám url ve tvaru http://web/en/modul/presenter/template/podpolozka_templatu/cislo_podpolozky a pokud přepnu jazyk, změní se i překlad, ale url se přepne na http://web/en/modul/presenter/template/ /podpolozka_templatu a /cislo_podpolozky jsou parametry v URL, které mám pomocí routy $mfModuleRouter[] = new Route('[<locale=es es|en>/]manufacturing/<presenter>/<action>[/<tab>][/<id>]');, přepsané na coolURL a potřeboval bych ponechat kompletní url i při přepnutí jazyka
  2. Mám ORACLE DB a potřebuji přepínat pomocí select boxu mezi produkční a testovací DB, jaká je nejschůdnější cesta ? Potřebuji změnit jen TNSNAMES (usr/pwd zustane stejné)

Děkuji mnohokrát

Editoval Joacim (30. 1. 2017 10:17)

CZechBoY
Člen | 3608
+
0
-

ad 1: Pošli všechny routy (nejspíš třída RouterFactory).

ad 2: Já mám nakonfigurované klasicky 2 databáze. Nejspíš by se to mělo řešit pomocí DI rozšíření, které
určí jaké spojení se má autowirovat.
Já osobně to řeším resolverem databáze, což je nejspíš špatně (schovávání závislosti atd. a další nepříjemnosti). U mě je problém, že mám ještě 2 druhy databází takže to takhle jednoduše nejspíš vyřešit nepůjde.

Joacim
Člen | 229
+
0
-

CZechBoY napsal(a):

ad 1: Pošli všechny routy (nejspíš třída RouterFactory).

ad 2: Já mám nakonfigurované klasicky 2 databáze. Nejspíš by se to mělo řešit pomocí DI rozšíření, které
určí jaké spojení se má autowirovat.
Já osobně to řeším resolverem databáze, což je nejspíš špatně (schovávání závislosti atd. a další nepříjemnosti). U mě je problém, že mám ještě 2 druhy databází takže to takhle jednoduše nejspíš vyřešit nepůjde.

public static function createRouter() {
    $router = new RouteList();

    // Manufacturing Modul
    $router[] = $mfModuleRouter = new RouteList('Manufacturing');
    $mfModuleRouter[] = new Route('[<locale=es es|en>/]manufacturing/<presenter>/<action>[/<tab>][/<id>]');

    $router[] = new Route('[<locale=es es|en>/]<presenter>/<action>/[<id>]', "Home:default");

    return $router;
}

No já mám stejné DB (1 ku 1), query taky stejné, nepotřebuji ORM jako je doctrine, jen přepnout connection string nejlépe z config.neon kde budu mít DB1 a DB2

CZechBoY
Člen | 3608
+
0
-

Nešlo by to přepínání db vyřešit už na úrovní bootstrap.php? Produkční databáze na produkčním prostředí a vývojová na vývojovým?

if ($configurator->isDebugMode()) {
	$configurator->addConfig('config.local.dev.neon');
} else {
	$configurator->addConfig('config.local.prod.neon');
}
Joacim
Člen | 229
+
0
-

CZechBoY napsal(a):

Nešlo by to přepínání db vyřešit už na úrovní bootstrap.php? Produkční databáze na produkčním prostředí a vývojová na vývojovým?

if ($configurator->isDebugMode()) {
	$configurator->addConfig('config.local.dev.neon');
} else {
	$configurator->addConfig('config.local.prod.neon');
}

potřebuji přepínání přímo v aplikaci, jinak bych tuto metodu použil

CZechBoY
Člen | 3608
+
0
-

Můžeš si teda databázi uložit třeba do session a v bootstrapu to zase vyčíst. Záleží jak moc na to máš času a jak se s tim chceš patlat :-).

Joacim
Člen | 229
+
0
-

CZechBoY napsal(a):

Můžeš si teda databázi uložit třeba do session a v bootstrapu to zase vyčíst. Záleží jak moc na to máš času a jak se s tim chceš patlat :-).

lze nějako jen zaměnit jeden parametr načítaný z local.config.neon ?

database:
	dsn: 'oci:dbname= XXX
CZechBoY
Člen | 3608
+
+1
-

Pomocí proměnné by to šlo. Tu proměnnou si předáš z php.

if (!empty($_SESSION['dbname'])) { // nebo nějak striktněji
	$configurator->addParameters(['dbname' => $_SESSION['dbname']]);
}
database:
    dsn: 'oci:dbname=%dbname%'
Joacim
Člen | 229
+
0
-

Už jsem to zprovoznil

Editoval Joacim (2. 2. 2017 13:40)