vefeer
16.09.2009, 18:55:22
Witam,
Możecie mi powiedzieć, jaki wg was jest najlepszy sposób na organizację danych konfiguracyjnych? Czy dane te są zawarte w specjalnej klasie Config.class.php, czy może po prostu wylistowane w pliku config.php w sposób define(zmienna, wartosc), czy może jeszcze inaczej? Dziękuję za odpowiedzi.
P.S. tu jest ciekawy
Artykuł
kfc4
16.09.2009, 19:46:14
Ja używam tablic.
marcio
16.09.2009, 19:57:09
Ja uzywam tablice na glowny konfig a stale na sciezki generowane na podstawie konfigu.
vefeer
16.09.2009, 20:04:15
Czy te tablice includujecie do każdego pliku, który wymaga danych w nich zawartych?
Dodatkowe pytanie: przypuśćmy, że dane konfiguracyjne przechowujemy w tablicy $config w pliku config.php. W osobnym pliku Klasa.class.php tworzę klasę Klasa. Plik config.php includuje przed deklaracją klasy. Mam problem, ponieważ w funkcjach klasy zmienna $config jest niewidoczna mimo deklaracji global $config wewnątrz funkcji. Dziękuję za odpowiedzi.
kfc4
16.09.2009, 20:28:39
Nie, mamy jeden plik do którego includujemy wszystko co jest potrzebne (przynajmniej ja).
Pokaż kod. Może w złym miejscu używasz tego globala.
vefeer
16.09.2009, 20:30:07
CODE
<?php
define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT'].'/firma/');
include(ROOT_PATH.'config/config_front.php');
class Sender
{
private $_db;
public function __construct()
{
global $config;
try
{
$this->_db = new PDO($config['dsn'], $config['username'], $config['pass']);
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e)
{
echo 'Wystąpił błąd: '.$e->getMessage();
}
}
public function __destruct()
{
$this->_db = NULL;
}
...
config
CODE
$config = array();
$config['dsn'] = 'wartosc';
$config['username'] = 'wartosc';
$config['pass'] = 'wartosc';
skowron-line
16.09.2009, 20:36:40
a nei lepiej podać zmienną $config jako parametr konstruktora
vefeer
16.09.2009, 20:39:56
W zmiennej tablicowej $config mam jeszcze masę innych zmiennych używanych w dalszych funkcjach klasy, musiałbym ją przypisać do zmiennej klasy, aby użyć jej również poza konstruktorem, a w różnych plikach, klasach wykorzystywane są różne części zmiennej $config, dlatego chciałem uniknąć wiązania jej z klasą.
skowron-line
16.09.2009, 20:44:32
Cytat(vefeer @ 16.09.2009, 19:39:56 )

funkcjach klasy
Metodach.
public function __construct( $config )
{
$this->config = $config;
}
public function inna()
{
echo $this->config[ 'cos_innego' ]; }
vefeer
16.09.2009, 20:59:00
Nie zrozumieliśmy się, po prostu nie chcę przechowywać całej zmiennej $config w obiekcie klasy, kiedy ogromna część tej tablicy mi się w danej klasie nie przyda. Chcę, żeby zmienna $config przechowywała wszystkie dane konfiguracyjne, ale np. w klasie 1. tylko część tych danych mi się przyda, a w klasie 2. druga część. Gdybym w konstruktorze przekazywał zmienną $config, każdy obiekt klasy przechowywałby wszystkie pola tej zmiennej, co jest niepotrzebne.
kfc4
16.09.2009, 21:22:48
To też jest jest ciekawe rozwiązanie, które akurat u Ciebie by się sprawdziło:
Do np. indexu includujesz klasę konfiguracyjną. Klasa ta wygląda mniej więcej tak:
class Config {
'zmienna' => 'wartosc'
);
}
I jak potrzebujesz czegoś to
Config::$daj['zmienna'];
Dzięki temu, że zaincludujesz ją do np. indexu (lub innego front controlera) będzie zawsze pod ręką.
erix
16.09.2009, 21:42:17
No to jest akurat wzorzec registry.
Osobiście stosuję coś takiego, że każda klasa dziedziczy po praprzodku wszystkich klas - konstruktor automatycznie dodaje publiczną własność z konfiguracją całego systemu.
Jeśli chodzi o konfigurację pojedynczego modułu - osobne pliki, tablica w klasie, wczytywane przez konstruktor.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.