Nette\Database – změna accessoru Connection::$driver
- dcepelik
- Člen | 36
Zdravím vás,
stavím nad Nette\Database
vlastní vrstvu a narážím na
následující problém: v konstruktoru potomka potřebuji nastavit
používaný driver, tzn. přiřadit do proměnné
Nette\Database\Connection::$driver
– ta je však privátní.
Napadá mě několik řešení, ale ani jedno vhodné:
- zkopírovat kód třídy a ve „vlastní“ implementaci upravit chování,
- zasáhnout přímo do kódu Nette,
- komponovat
Nette\Database\Connection
a postavit tak nad ní cosi jako Adapter.
Poslední jmenované řešení je sice „čisté“, ale poněkud složité pro to, čeho se snažím dosáhnout.
Bylo by možné nastavit accessor
Nette\Database\Connection::$driver
na
protected
?
Přeji pěkný den,
David Čepelík
Editoval dcepelik (29. 6. 2011 20:08)
- dcepelik
- Člen | 36
redhead napsal(a):
A proč ho nenastavíš přes konstruktor Connection samotné?
Pokud myslíš jako součást DSN, tak proto, že mi nejde o název driveru
(např. mysql
), ale o třídu, která slouží jako driver (např.
Nette\Database\Drivers\MySqlDriver
). Tu není možné změnit,
přestože to může být žádoucí, chci-li používat vlastní driver.
(Možná je to trochu atypické, ale budiž.) Její název se skládá
v konstruktoru (lok. $class
)
Měl jsem se vyjádřit jasněji. Pokud jsi poukazoval na něco jiného, můžeš to, prosím, upřesnit?
Editoval dcepelik (29. 6. 2011 22:11)
- dcepelik
- Člen | 36
Jde mi o to, že ať zadám jakýkoli název driveru, $class
se
nastaví na:
<?php
$class = 'Nette\Database\Drivers\\' . $this->getAttribute(PDO::ATTR_DRIVER_NAME) . 'Driver';
?>
A jsem v koncích – ve jmenném prostoru
Nette\Database\Drivers
jsou už všechny názvy obsazené a jiné
použít nemohu. Zkoušel jsem do příslušené části DSN zapsat název
vlastního driveru, např. „ExtendedMySql“, nicméně to musí,
pochopitelně, selhat. Název driveru slouží primárně vlastnímu PDO, to,
že jej využívá Nette\Database
, je z hlediska návrhu
vedlejší, což jsem si zprvu neuvědomil.
Tedy proto.
PS: pokud si stále nerozumíme, mohl bys uvést příklad?
Editoval dcepelik (29. 6. 2011 23:11)
- dcepelik
- Člen | 36
David Grudl napsal(a):
Jak to nastavovat? Třeba přes 3. parameter $options?
Ano, to by šlo, díky!
Omlouvám se za zpožděnou reakci, nedostal jsem se dříve k počítači.
EDIT: Teď mě ještě napadá, že $options jsou čtvrtý parametr – mluvíme o téže věci?
Editoval dcepelik (4. 7. 2011 13:22)