config.ini konfigurace vlastní třídy
- daliborcaja
- Člen | 57
Zdravím
Nikde se mi nepodařilo najít jak pomocí config.ini nadefinovat konstanty
vlastni třídy.
Moje třída vypadá asi takto:
<?php
class TdClient extends SoapClient {
public $tdVsdl;
public $tdId;
public $tdLang;
public function __construct() {
... tady se provede pripojeni na zaklade definovanych konstant ...
}
}
?>
Potřebuji pomocí config.ini nadefinovat ty tri promenne co sou v te
tride.
Předem děkuji za každou radu.
- Vojtěch Dobeš
- Gold Partner | 1316
Udělal bych to asi takto, bude to řešením?
config.ini:
tdclient.tdVsdl
tdclient.tdId...
Vytvoření instance:
$tdClientOptions = Environment::getConfig('tdclient');
$tdClient = new TdClient($tdClientOptions);
konstruktor:
public function __construct(array $options)
{
// zpracování $options jak je potřeba
}
Klíčové je získání té konfigurace, k tomu je
Environment::getConfig('libovolný klíč')
, který vrátí pole
nakonfigurovaných hodnot, s tím už pak lze nakládat dle potřeby.
Editoval vojtech.dobes (17. 10. 2010 8:18)
- daliborcaja
- Člen | 57
Díky za radu
Ještě jsem to trochu upravil:
<?php
class TdClient extends SoapClient {
public $tdVsdl;
public $tdId;
public $tdLang;
public function __construct() {
try {
$tdOpts = Environment::getConfig('tdclient');
if (!isset($tdOpts['vsdl'], $tdOpts['id'], $tdOpts['lang']))
throw new TdException('Chyba v konfiguraci "tdclient", kontaktujte správce.');
$this->tdVsdl = $tdOpts['vsdl'];
$this->tdId = $tdOpts['id'];
$this->tdLang = $tdOpts['lang'];
$soapOpts = array(
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
'encoding' => 'utf-8'
);
parent::__construct($this->tdVsdl, $soapOpts);
} catch(TdException $e) {
throw $e;
} catch (Exception $e) {
throw new Exception('Nepodařilo se připojit na databázi autodílů. Zkuste to později.');
}
}
}
class TdException extends Exception {}
?>
A tady kousek z config.ini:
tdclient.vsdl = "http://www.xxx.net/";
tdclient.id = "xxx";
tdclient.lang = "cs";
- Vojtěch Dobeš
- Gold Partner | 1316
Rádo se stalo. Volání Environment::getConfig
jsem nechal
venku kvůli té Dependency Injection, jak se o ní pořád mluví:)
- marek.dusek
- Člen | 99
Jen dvě drobnosti:
- jaka je pointa ve vyhozeni tdexception, zachyceni a prehozeni? spis by tam slusela nejaka invalidargument atp? + dole nechytat exception, ale soapfault
- wsdl ;)
- daliborcaja
- Člen | 57
marek.dusek napsal(a):
Jen dvě drobnosti:
- jaka je pointa ve vyhozeni tdexception, zachyceni a prehozeni? spis by tam slusela nejaka invalidargument atp? + dole nechytat exception, ale soapfault
- wsdl ;)
- je to myšleno tak že v kodu sou nake ty tdexception (ve skutecnosti je jich tam vic) a jejich chybovou hlasku potrebuji predat nadrizene exception a pak tam muzou vzniknout dalsi nespecifikovane chyby a na ne potebuju poslat nadrizene exception tu hlášku ‚Nepodařilo se připojit na databázi autodílů. Zkuste to později.‘
- wsdl se jmenuje jazyk ve kterem je ten dokument na který míří ta url (Web Service Description Language), je to objekt zakodovany do XML. Editace: je ja si nevšim, mám tam v místo w
Editoval daliborcaja (20. 10. 2010 18:24)