MVC: hoe model inladen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Raoul -

- Raoul -

05/04/2012 16:34:15
Quote Anchor link
Ik dacht aan 2 methodes:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
//methode 1
$naam = $this->load_model('naam');
//methode 2
$this->load_model('naam');
$naam = new Naam();
?>

Wat denken jullie?
 
PHP hulp

PHP hulp

26/09/2020 15:03:01
 
Bram Boos

Bram Boos

05/04/2012 16:45:51
Quote Anchor link
Ik ben fan van ActiveRecord dus doe mij maar:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $model
= modelName::methodName();
?>
 
Ozzie PHP

Ozzie PHP

05/04/2012 16:48:43
Quote Anchor link
Waarom niet gewoon:

$model = new HuppeldepupModel();
 
- Raoul -

- Raoul -

05/04/2012 17:00:15
Quote Anchor link
Omdat de model ook nog ingeladen moet worden.
 

05/04/2012 17:50:03
Quote Anchor link
Het mooiste is is om alle models via een soort autoloader te laden, hierdoor zijn ze altijd beschikbaar, en hoef je alleen nog maar $model = new Model(); aan te roepen.

En om het geheel nog mooier te maken zou ik ook namespaces gebruiken.
Gewijzigd op 05/04/2012 17:50:21 door
 
Ozzie PHP

Ozzie PHP

05/04/2012 18:07:36
Quote Anchor link
Je maakt dus gewoon een autoloader en als je dat gedaan hebt dan kun je een class / model gewoon direct aanroepen via $model = new Model();

Toevoeging op 05/04/2012 18:08:23:

http://nl3.php.net/autoload
 
- Raoul -

- Raoul -

05/04/2012 18:14:34
Quote Anchor link
Moet ik dan zo'n autoload functie in mijn bootstrap zetten?
 
Wouter J

Wouter J

05/04/2012 18:22:19
Quote Anchor link
Ik zou een autoload klasse maken en die aanmaken, vervolgens wordt er elke keer als je een onbekende klasse instantiëerd eerst de autoloader aangeroepen, hierdoor kun je de benodigde bestanden inladen.

Ik zou niet __autoload gebruiken, maar spl_autoload_register. Hierdoor kun je meerdere autoloaders maken, dus als de ene faalt probeert PHP de ander, en het heeft iets meer OO gehalte.

Voorbeelden:
- die van Zend
- die van symfony
- mijn zelfgemaakte classloader klasse
 
Ozzie PHP

Ozzie PHP

05/04/2012 18:22:51
Quote Anchor link
Ja, precies :)
Je kan ook deze gebruiken dan kun je meerdere autoload functies registreren:

http://nl.php.net/spl_autoload_register

Voordat je de autoload functie maakt moet je even goed nadenken wat je precies wilt.

Je kunt bijv. zoiets doen:

$product_model = new Product_Model();

Je autoload functie moet dan zien dat de class naam op Model eindigt en het bestand vanuit de Models map includen.

Hetzelfde kun je dan doen voor je controllers:

$product_controller = new Product_Controller();
Gewijzigd op 05/04/2012 18:24:32 door Ozzie PHP
 
- Raoul -

- Raoul -

05/04/2012 18:35:20
Quote Anchor link
Bedankt! Ik zal er eens naar kijken.
 
Wouter J

Wouter J

05/04/2012 19:07:58
Quote Anchor link
Ozzie,

Of je gebruikt die mooie namespaces:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$product_model
= RaoulMVC\Bundles\Acme\SiteBundle\Model\Product();
?>

Hierbij kun je de PSR-0 standaarden gebruiken en dan include je bijv. lib/RaoulMVC/Bundles/Acme/SiteBundle/Model/Product.php

Laatst vroeg iemand ong. hetzelfde, misschien handig om door te lezen: http://www.phphulp.nl/php/forum/topic/require-gedrag/83614/#595145
 
Ozzie PHP

Ozzie PHP

05/04/2012 19:43:36
Quote Anchor link
Ja, je kan namespaces gebruiken maar ik vind de manier die ik beschreef net zo prettig. Kwestie van persoonlijke voorkeur.
 
- Raoul -

- Raoul -

05/04/2012 19:45:08
Quote Anchor link
Namespaces... nah... ik vind dat het dan redelijk veel werk is om een simpele class in te starten.
 



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.