MVC Database
Ik probeer in mijn Framework via één model, de index, de database in te laden. Ik loop alleen een beetje vast op de logica hiervan. Dit is wat ik nu heb staan:
IndexModel
Database
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 ;)
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
Gesponsorde koppelingen:
om simpel weg verbinding met pdo te maken kun je de volgende code gebruiken
in mvc is het ook gebruikelijk dat je met registry werkt
als je een registry class aanmaakt kun je dat op deze manier doen:
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:
hoppelijk heb je er iets aan
greetz rob
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?
phPro werkt bij mij ook niet, gelukkig hebben we altijd google cache nog.
Ja. Die tut is goed, de site vaak down.
Die Phpro tutorial is wel okee,
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:
Edit: Aangepast
Rob
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



