připojení na databázi podle webu

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

Jake je nejlepší řešení pro připojení se k databázi podle domeny / aplikace v rámci?

teď to mam přes constructor.

takto?:

database:
default:
dsn: „mysql:host=localhost;dbname=nette“
user: „root“
password: „
app2:
dsn: „mysql:host=localhost;dbname=app2“
user: „app2_root“
password: „

jak a kde je nejlepší se připojit?

basePresneter?
a jak? new Connection(„app2“)
něco take by bylo možné? nebo si musim načíst data s configu?

dekuji

CZechBoY
Člen | 3608
+
+1
-

No nejlepší je držet se MVC a mít přístup k databázi pouze v modelové vrstvě. Ty modely potom injectuješ do presenteru a v presenterech chceš po modelový vrstvě nějaký akce – editace, přidání, výpis něčeho, …
nějaký repository v modelové vrstvě

class MyRepository
{
	public function __construct(Context $db)
	{
		$this->db = $db;
	}

	public function getById($id)
	{
		return $this->db->table('tabulka')->wherePrimary($id)->fetch();
	}
}

zaregistruješ jako službu v DIC (dependency injection container)

services:
	- MyRepository

a použiješ v presenteru

class MyPresenter extends Nette\Application\UI\Presenter
{
	/** @var MyRepository @inject */
	public $myRepository;

	public function actionDetail($id)
	{
		$this->template->info = $this->myRepository->getById($id);
	}
}

Pokud chceš využívat obě databáze tak je potřeba někde uvést jakou db budeš používat. Jde to zase v konfiguráku uvést jako parametr konstruktoru.
např použiju app2 databázi

class App2Repository
{
	public function __construct(Context $db)
	{
		$this->db = $db;
	}
}

v dic zaregistruju

database:
	app2:
		# nastaveni db
		autowired: false # tuto službu nechci automaticky předávat tam, kde vyžadována služba Nette\Database\Context (tzn. tuhle službu do nějaký služby dostaneš jen manuálně uvedením tady v konfiguraci)
services:
	- App2Repository(@database.app2.context)

Editoval CZechBoY (19. 5. 2016 14:36)

malek8
Člen | 13
+
0
-

super, diky