config.ini konfigurace vlastní třídy

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

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

Jen dvě drobnosti:

  1. jaka je pointa ve vyhozeni tdexception, zachyceni a prehozeni? spis by tam slusela nejaka invalidargument atp? + dole nechytat exception, ale soapfault
  2. wsdl ;)
daliborcaja
Člen | 57
+
0
-

marek.dusek napsal(a):

Jen dvě drobnosti:

  1. jaka je pointa ve vyhozeni tdexception, zachyceni a prehozeni? spis by tam slusela nejaka invalidargument atp? + dole nechytat exception, ale soapfault
  2. wsdl ;)
  1. 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.‘
  2. 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)