Mijn Framework
Ik wil veel tijd besteden aan het systeem en het in de toekomst mijn oude CMS systeem te laten vervangen, omdat dit niet in OOP is geschreven.
Nu heb ik dit topic gestart om wat algemene vragen te stellen. Ik weet dat er meer mensen op dit forum bezig zijn met een Framework, maar ik wil graag verder met mijn eigen.
In de index.php laad ik de Core door middel van de volgende regels:
Ik heb er bewust voor gekozen om zoveel mogelijk te defineren zodat ik duidelijk kan zien welke bestanden er worden opgehaald. Dit is denk ik heel erg persoonlijk.
Vervolgens heb ik in de Core het volgende probleem, overige code heb ik weggehaald:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
class Core
{
private static $CoreStart;
private static $CoreLoaded;
/**
* The constructor in this class.
*/
public function __construct()
{
/**
* Start the session. This is very important!
*/
session_start();
/**
* First check if the language class is loaded, else show an error.
*/
self::LoadFile(LIBRARY . DS . 'Language' . PHP_SUFFIX);
/**
* Check if the class can be loaded.
*/
if (!Language::Initalize())
{
die('<strong>EN:</strong> The language class can\'t be loaded, please contact the webmaster!<br /><br />
<strong>NL:</strong> De taal klasse kan niet geladen worden, neem contact op met de webmaster!');
}
else
{
return true;
}
/**
* To make the autoloader it a little bit easier; load all the files that we have in the libary.
* Make sure the files exists!
*/
self::LoadFile(LIBRARY . DS . 'MessageHandler' . PHP_SUFFIX);
self::LoadFile(LIBRARY . DS . 'Config' . PHP_SUFFIX);
self::LoadFile(LIBRARY . DS . 'Database' . PHP_SUFFIX);
/**
* The variables does have the correct values.
*/
if ($this->CoreLoaded !== false AND $_SESSION["CoreLoaded"] !== false AND !empty($this->CoreStart))
{
/**
* The core is loaded, we can go forwards! We gonna load some classes from the libary.
*/
Config::Initalize();
//PDO Connectie gebeurd hier.
/**
* The variables doesn't have the correct values.
*/
}
else
{
/**
* The core is'nt loaded, we can't go forwards and throw a new message and the site will die!
*/
MessageHandler::NewMessage('1', 'Error', 'true', $Language["CORE_ERROR"]);
return false;
}
}
}
?>
class Core
{
private static $CoreStart;
private static $CoreLoaded;
/**
* The constructor in this class.
*/
public function __construct()
{
/**
* Start the session. This is very important!
*/
session_start();
/**
* First check if the language class is loaded, else show an error.
*/
self::LoadFile(LIBRARY . DS . 'Language' . PHP_SUFFIX);
/**
* Check if the class can be loaded.
*/
if (!Language::Initalize())
{
die('<strong>EN:</strong> The language class can\'t be loaded, please contact the webmaster!<br /><br />
<strong>NL:</strong> De taal klasse kan niet geladen worden, neem contact op met de webmaster!');
}
else
{
return true;
}
/**
* To make the autoloader it a little bit easier; load all the files that we have in the libary.
* Make sure the files exists!
*/
self::LoadFile(LIBRARY . DS . 'MessageHandler' . PHP_SUFFIX);
self::LoadFile(LIBRARY . DS . 'Config' . PHP_SUFFIX);
self::LoadFile(LIBRARY . DS . 'Database' . PHP_SUFFIX);
/**
* The variables does have the correct values.
*/
if ($this->CoreLoaded !== false AND $_SESSION["CoreLoaded"] !== false AND !empty($this->CoreStart))
{
/**
* The core is loaded, we can go forwards! We gonna load some classes from the libary.
*/
Config::Initalize();
//PDO Connectie gebeurd hier.
/**
* The variables doesn't have the correct values.
*/
}
else
{
/**
* The core is'nt loaded, we can't go forwards and throw a new message and the site will die!
*/
MessageHandler::NewMessage('1', 'Error', 'true', $Language["CORE_ERROR"]);
return false;
}
}
}
?>
Het documenteren van de documenten moet ik nog eens goed aandacht aan besteden. Dit is even snel opgezet, kun je wel zien aan de Engelse teksten.
Ik ben een beetje het draad kwijt, hoe kan ik nu het beste de Language class inladen en ervoor zorgen dat ik hem in de Core al kan gebruiken zodat ik mooie meldingen kan maken via mijn custom MessageHandler (Exceptions).
Ook moet ik nog eens kijken naar regel 46. Op dit moment wordt er een sessie gezet met de waarde true/false als de functie self::LoadFile is mislukt. Zodra het is mislukt, wordt de waarde overgeschreven.
Gewijzigd op 16/08/2011 22:29:55 door PHP Scripter
Ik zelf denk dat je niet de Language class niet door de Core zelf moet geladen worden, maar het is jouw keuze.
Fabian bedankt voor je reactie. Ik laad liever eigenlijk alles in de Core. Ik ga er toch nog eens even mee stoeien.
Denk aan scheiding van taken. Een klasse moet één goed gedefinieerde taak hebben. Meer OO zou zijn om dus een ClassLoader klasse (of hoe je hem ook wilt noemen) aan te maken die het autoloaden voor zijn rekening neemt. Probeer je constructor ook wat kleiner te maken. Je doet te veel in één functie.
Dit is sowieso meer een functie dan een OO klasse. Heb je al veel tutorials gelezen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
class Registry
{
/**
* Variables in this class
*
* @private Instance (static)
* @private DataArrayArray
*/
private static $Instance = null;
private $DataArrayArray = array();
/**
* @function GetInstance
* Get the instance of the class
*
* @param Instance
*/
static public function GetInstance( )
{
if(self::$Instance === null)
{
self::$Instance = new self();
}
return self::$Instance;
}
/**
* @function SetValue
* Set a variable with a value
*
* @param DataArray
*/
public function SetValue($Key, $Value)
{
$this->DataArray[$Key] = $Value;
}
/**
* @function SetValue
* Get a variable with a value
*
* @param DataArray
*/
public function GetValue($Key)
{
echo (isset($this->DataArray[$Key]) ? $this->DataArray[$Key] : null);
}
}
?>
class Registry
{
/**
* Variables in this class
*
* @private Instance (static)
* @private DataArrayArray
*/
private static $Instance = null;
private $DataArrayArray = array();
/**
* @function GetInstance
* Get the instance of the class
*
* @param Instance
*/
static public function GetInstance( )
{
if(self::$Instance === null)
{
self::$Instance = new self();
}
return self::$Instance;
}
/**
* @function SetValue
* Set a variable with a value
*
* @param DataArray
*/
public function SetValue($Key, $Value)
{
$this->DataArray[$Key] = $Value;
}
/**
* @function SetValue
* Get a variable with a value
*
* @param DataArray
*/
public function GetValue($Key)
{
echo (isset($this->DataArray[$Key]) ? $this->DataArray[$Key] : null);
}
}
?>
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$Registry = Registry::GetInstance();
$Registry->SetValue('test', 'phphulp');
$Registry->GetValue('test');
?>
$Registry = Registry::GetInstance();
$Registry->SetValue('test', 'phphulp');
$Registry->GetValue('test');
?>
Is dit de juiste manier om één register te gebruiken? Ergens anders las ik weer dat een register net zo fout is als het gebruik van globals. En dus moet ik nu in elke methode een nieuw object van het register maken.
(ik zie toevallig een foutje op regel 11: $DataArrayArray moet zijn $DataArray)
Oops! Heb het aangepast, dank!
Het is mooier om van je register geen singleton te maken, maar om het als variabele door te geven.
Pim, zou je daar een klein voorbeeldje van kunnen geven?
Iemand nog een voorbeeldje voor de tip van Pim? :)
Schopje.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// Heel basaal
class Register extends ArrayObject {}
// bootstrap.php
$register['db'] = new Database;
$controller->setRegister($register);
// controller
$this->_register['db']->query();
// Heel basaal
class Register extends ArrayObject {}
// bootstrap.php
$register['db'] = new Database;
$controller->setRegister($register);
// controller
$this->_register['db']->query();
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Controller
{
public $smarty;
public function __construct()
{
$this->smarty = new Smarty();
$this->smarty->template_dir = VIEW_PATH;
$this->smarty->compile_dir = VIEW_C_PATH;
$this->smarty->cache_dir = CACHE_PATH;
$this->smarty->config_dir = CONFIG_PATH;
$this->smarty->cache_lifetime = 3600;
$this->smarty->caching = 1;
}
}
?>
class Controller
{
public $smarty;
public function __construct()
{
$this->smarty = new Smarty();
$this->smarty->template_dir = VIEW_PATH;
$this->smarty->compile_dir = VIEW_C_PATH;
$this->smarty->cache_dir = CACHE_PATH;
$this->smarty->config_dir = CONFIG_PATH;
$this->smarty->cache_lifetime = 3600;
$this->smarty->caching = 1;
}
}
?>
Wat is eigenlijk een goede plek om Smarty te laden en te configureren binnen het MVC? Heb het nu tijdelijk even in de controller gezet.
Gewijzigd op 15/09/2011 17:28:37 door PHP Scripter