MVC Database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Scripter

PHP Scripter

09/09/2011 20:47:37
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class IndexModel
{
    private $Database;
    
    public function __construct()
    {

        $this->Database = new Database();
    }

    
    public function TestFunction()
    {

        /** **/
    }
}

?>


Database
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class Database
{
    public $Database;
    
    public function __construct()
    {

        $this->Database = '';
        
        // new PDO('mysql:host=' . DB_HOSTNAME . ';dbname=' . DB_DATABASE . '', DB_USERNAME, DB_PASSWORD);
    }
}

?>


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
 
PHP hulp

PHP hulp

21/11/2024 20:56:11
 
Robert  dat ben ik

Robert dat ben ik

10/09/2011 12:12:29
Quote Anchor link
om simpel weg verbinding met pdo te maken kun je de volgende code gebruiken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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(){}
}

?>




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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
Class Registry {
    
    private $var = array();
    
    public function __set($index, $value) {
        $this->var[$index] = $value;
    }

    public function __get($index) {
        return $this->var[$index];
    }
}

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
class IndexModel
{
    private $registry;
    
    public function __construct($registry)
    {

        $this->registry = $registry;
    }

    
    public function TestFunction()
    {

        $sql= 'SELECT username FROM members';
        $this->registry->database->prepare($sql);
        
        /**enz enz... **/
    }
}

?>


hoppelijk heb je er iets aan

greetz rob
Gewijzigd op 10/09/2011 12:15:28 door Robert dat ben ik
 
Pim -

Pim -

12/09/2011 11:00:57
Quote Anchor link
Energy? ;-)
 
PHP Scripter

PHP Scripter

12/09/2011 19:56:03
Quote Anchor link
Robert, ik kom er nog niet helemaal uit op jouw manier. Maar ik probeer het straks nog eens ;)
 
Aad B

Aad B

12/09/2011 21:21:02
Quote Anchor link
Pim - op 12/09/2011 11:00:57:
Energy? ;-)

Klok horen luiden maar weet niet waar het engine draait
;-)
 
Robert  dat ben ik

Robert dat ben ik

12/09/2011 23:23:42
Quote Anchor link
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
 
PHP Scripter

PHP Scripter

13/09/2011 16:12:48
Quote Anchor link
Ik weet niet of het aan mij ligt maar de tutorial op phPro werkt niet?
 
- -

- -

13/09/2011 16:20:55
Quote Anchor link
phPro werkt bij mij ook niet, gelukkig hebben we altijd google cache nog.
 
Pim -

Pim -

13/09/2011 18:51:28
Quote Anchor link
Ja. Die tut is goed, de site vaak down.
 
Robert  dat ben ik

Robert dat ben ik

14/09/2011 13:01:07
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
 
Pim -

Pim -

15/09/2011 09:23:58
Quote Anchor link
Oeh, wat een lelijke oplossing. Als je nu een nieuwe controller wil toevoegen, moet je de router aanpassen.
 
Robert  dat ben ik

Robert dat ben ik

15/09/2011 09:32:16
Quote Anchor link
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.