MVC Database
IndexModel
Code (php)
Database
Code (php)
Hoe kan ik dit het beste aanpakken? Op internet lees ik veel over de gegevens opslaan in een Registry, maar dat doe ik nu alleen met variablen.
Graag ontvang ik wat info over een PDO connectie i.c.m. het MVC ;)
Gewijzigd op 09/09/2011 20:47:59 door PHP Scripter
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
//database config
define("ENERGY" ,"mysql");
define("HOST" ,"localhost");
define("DB_USER" ,"**********");
define("DB_PASS" ,"**********");
define("DB_NAME" ,"**********");
define("DNS" ,ENERGY.":host=".HOST.";dbname=".DB_NAME);
class Database extends PDO {
public function __construct(){
parent::__construct( DNS, DB_USER, DB_PASS );
}
private function __clone(){}
}
?>
//database config
define("ENERGY" ,"mysql");
define("HOST" ,"localhost");
define("DB_USER" ,"**********");
define("DB_PASS" ,"**********");
define("DB_NAME" ,"**********");
define("DNS" ,ENERGY.":host=".HOST.";dbname=".DB_NAME);
class Database extends PDO {
public function __construct(){
parent::__construct( DNS, DB_USER, DB_PASS );
}
private function __clone(){}
}
?>
in mvc is het ook gebruikelijk dat je met registry werkt
als je een registry class aanmaakt kun je dat op deze manier doen:
Code (php)
in je index.php doe je dit:
$registry = new Registry();
$registry->database = new Database;
als je nu ergens een verbinding wilt hebben, het enigste wat je dan doet is:
Code (php)
hoppelijk heb je er iets aan
greetz rob
Gewijzigd op 10/09/2011 12:15:28 door Robert dat ben ik
Energy? ;-)
Robert, ik kom er nog niet helemaal uit op jouw manier. Maar ik probeer het straks nog eens ;)
Pim - op 12/09/2011 11:00:57:
Energy? ;-)
Klok horen luiden maar weet niet waar het engine draait
;-)
PHP Scripter op 12/09/2011 19:56:03:
Robert, ik kom er nog niet helemaal uit op jouw manier. Maar ik probeer het straks nog eens ;)
kijk hier is: MVC Model
een klein voorbeeld hoe je het zou kunnen doen
Gewijzigd op 12/09/2011 23:28:49 door Robert dat ben ik
Ik weet niet of het aan mij ligt maar de tutorial op phPro werkt niet?
google cache nog.
phPro werkt bij mij ook niet, gelukkig hebben we altijd Ja. Die tut is goed, de site vaak down.
alleen 1 ding die totaal niet ok is in deze tutorial, dat is de
class router
functie getController()
er word geen controlle uitgevoerd op de $_GET['rt'], het enigste wat het doet is kijken of ie leeg is of niet.
Dit is niet voldoende aangezien het een user input kan bevatten en dus een validate nodig is om deze input te controlleren op injections.
inplaats van die router kun je deze router nemen:
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
70
71
72
73
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
70
71
72
73
<?php
/*
* Router Class
*/
class Router {
private $registry;
private $path;
private $file;
private $controller;
private $action;
function __construct($registry) {
$this->registry = $registry;
}
function setPath($path) {
if (is_dir($path) === false) {
throw new Exception ('Invalid controller path: `' . $path . '`');
}
$this->path = $path;
}
public function loader() {
$this->getController();
if (is_readable($this->file) === false) {
$this->file = $this->path.'/error404.php';
$this->controller = 'error404';
} else {
include_once $this->file;
$class = $this->controller.'Controller';
$controller = new $class($this->registry);
if (is_callable(array($controller, $this->action)) === false) {
$action = 'index';
} else {
$action = $this->action;
}
$controller->$action();
}
}
private function getController() {
if(isset($_GET['rt'])) {
if (!preg_match('/[a-zA-Z0-9]$/i', $_GET['rt'])) {
$this->file = $this->path.'/error404.php';
$this->controller = 'error404';
} else {
$router = (empty($_GET['rt'])) ? '' : $_GET['rt'];
if (empty($router)) {
$router = 'index';
}
if (empty($this->controller)) {
$this->controller = $router;
}
if (empty($this->action)) {
$this->action = $router;
}
$this->file = $this->path.'/'.$this->controller.'Controller.php';
}
} else {
if (empty($this->controller)) {
$this->controller = 'index';
}
$this->file = $this->path.'/'.$this->controller.'Controller.php';
}
}
}
?>
/*
* Router Class
*/
class Router {
private $registry;
private $path;
private $file;
private $controller;
private $action;
function __construct($registry) {
$this->registry = $registry;
}
function setPath($path) {
if (is_dir($path) === false) {
throw new Exception ('Invalid controller path: `' . $path . '`');
}
$this->path = $path;
}
public function loader() {
$this->getController();
if (is_readable($this->file) === false) {
$this->file = $this->path.'/error404.php';
$this->controller = 'error404';
} else {
include_once $this->file;
$class = $this->controller.'Controller';
$controller = new $class($this->registry);
if (is_callable(array($controller, $this->action)) === false) {
$action = 'index';
} else {
$action = $this->action;
}
$controller->$action();
}
}
private function getController() {
if(isset($_GET['rt'])) {
if (!preg_match('/[a-zA-Z0-9]$/i', $_GET['rt'])) {
$this->file = $this->path.'/error404.php';
$this->controller = 'error404';
} else {
$router = (empty($_GET['rt'])) ? '' : $_GET['rt'];
if (empty($router)) {
$router = 'index';
}
if (empty($this->controller)) {
$this->controller = $router;
}
if (empty($this->action)) {
$this->action = $router;
}
$this->file = $this->path.'/'.$this->controller.'Controller.php';
}
} else {
if (empty($this->controller)) {
$this->controller = 'index';
}
$this->file = $this->path.'/'.$this->controller.'Controller.php';
}
}
}
?>
Edit: Aangepast
Rob
Gewijzigd op 16/09/2011 08:20:23 door Robert dat ben ik
Oeh, wat een lelijke oplossing. Als je nu een nieuwe controller wil toevoegen, moet je de router aanpassen.
Pim - op 15/09/2011 09:23:58:
Oeh, wat een lelijke oplossing. Als je nu een nieuwe controller wil toevoegen, moet je de router aanpassen.
Daar zit wat in :) niet over na gedacht mijn fout, maar opzich werkt het wel ;)
je zou gewoon een preg_match() er voor kunnen gebruiken hoef je het niet meer aan te passen (voorbeeld is aangepast)
Gewijzigd op 16/09/2011 08:20:04 door Robert dat ben ik