Hoe model koppelen aan controller?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roy B

Roy B

06/10/2014 22:41:35
Quote Anchor link
Ik ben bezig met het schrijven van een eigen MVC. Graag ontvang ik tips over het koppelen van een Model aan een Controller. Niet iedere Controller maakt gebruik van een Model, dus moet het Model geen vereiste zijn.

Iemand tips?

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
<?php
// controller.php
class Controller
{
  protected $_model;

  public function setModel($model)
  {

    $this->_model = $model;
  }
}


// content.controller.php
class ContentController extends Controller
{
  
}


// index.php
$controller = new ContentController();

$model = "contentModel";
$controller->setModel($model);
?>
Gewijzigd op 06/10/2014 22:43:09 door Roy B
 
PHP hulp

PHP hulp

22/12/2024 04:05:45
 
Wouter Van Marrum

Wouter Van Marrum

06/10/2014 23:00:59
Quote Anchor link
Ik doe het in de grote lijnen zo :

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
<?php
// controller.php
class HomeController extends BaseController {

    public function __construct() {
        parent::__construct();
    }


    public function index() {
    
    $model = $this->loadModel('MODELNAME', 'MODELPATH');
    $model->function();
    }
}


//BaseController.php
class BaseController {

    function
__construct() {
        $this->openDatabaseConnection();
        $this->twig = $this->loadTwig();
        $this->blade = $this->loadBlade($view, $data = array() );
    }


    /**
     * Load the model with the given name.
     * loadModel("home/index", "HomeModel") would include models/home/index.model.php and create the object in the controller, like this:
     * $model = $this->loadModel("home/index", "HomeModel");
     * Note that the model class name is written in "CamelCase", the model's filename is the same in lowercase letters
     * @param string $model_name The name of the model
     * @return object model
     */

    public function loadModel($model_path, $model_name) {
    
        require APP . MOD . strtolower($model_path) . MOD_F;
        // return new model (and pass the database connection to the model)
        return new $model_name($this->db);
    }
}


}

?>


Zo ongeveer doe ik het.
Let op in de praktijk kan het ook anders.
 
Ward van der Put
Moderator

Ward van der Put

07/10/2014 09:58:40
Quote Anchor link
Wouter, doet je BaseController dan niet te veel? Je opent al in de constructor altijd een databaseverbinding (maar dat hoort bij het model) en je gaat vervolgens in de weer met Twig en Blade (maar dat zijn template engines voor de views). Het lijkt daardoor meer een front controller.
 



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.