Naamgeving classes, indeling
Page() (in page.mdl.php)
Settings() (in settings.mdl.php)
Het probleem waar ik echter mee zit is het volgende, als ik 1 pagina wil ophalen wordt dit
$oPage = new Page();
$oPage -> id = x
$oPage -> getData(); // en ik heb nu mijn volledige object gevult adhv de id
Maar als ik alle pagina's wil hebben dan wordt het:
$oPages = new Page();
$aPages = $oPages -> getAllRows(); // Array met alle paginas in als object
Het probleem vind ik nu de naamgeving, als ik 1 pagina moet hebben klopt new Page() perfect maar mag dit ook gewoon als ik meerdere pagina objecten ophaal?
Of moet ik hier een apart model pages.mdl.php voor maken?
En hoe doe ik het met settings? Settings.mdl.php bevat 1 rij uit de database met informatie over mijn website, zoals title, description, language,... echter is Setting een betere naam (classe namen altijd enkelvoud houden), maar dan dekt het weer niet de content namelijk dat het meerdere Settings zijn.
Ik hoop dat mijn probleem een beetje duidelijk is. En iemand meer opheldering kan geven wat nu de mooiste manier is.
Sjoerd schreef op 28.11.2008 08:40:
Ik werk volgens het MVC2 model, en heb dus een aantal models met namen als:
Page() (in page.mdl.php)
Settings() (in settings.mdl.php)
Het probleem waar ik echter mee zit is het volgende, als ik 1 pagina wil ophalen wordt dit
$oPage = new Page();
$oPage -> id = x
$oPage -> getData(); // en ik heb nu mijn volledige object gevult adhv de id
Maar als ik alle pagina's wil hebben dan wordt het:
$oPages = new Page();
$aPages = $oPages -> getAllRows(); // Array met alle paginas in als object
Het probleem vind ik nu de naamgeving, als ik 1 pagina moet hebben klopt new Page() perfect maar mag dit ook gewoon als ik meerdere pagina objecten ophaal?
Of moet ik hier een apart model pages.mdl.php voor maken?
En hoe doe ik het met settings? Settings.mdl.php bevat 1 rij uit de database met informatie over mijn website, zoals title, description, language,... echter is Setting een betere naam (classe namen altijd enkelvoud houden), maar dan dekt het weer niet de content namelijk dat het meerdere Settings zijn.
Ik hoop dat mijn probleem een beetje duidelijk is. En iemand meer opheldering kan geven wat nu de mooiste manier is.
Page() (in page.mdl.php)
Settings() (in settings.mdl.php)
Het probleem waar ik echter mee zit is het volgende, als ik 1 pagina wil ophalen wordt dit
$oPage = new Page();
$oPage -> id = x
$oPage -> getData(); // en ik heb nu mijn volledige object gevult adhv de id
Maar als ik alle pagina's wil hebben dan wordt het:
$oPages = new Page();
$aPages = $oPages -> getAllRows(); // Array met alle paginas in als object
Het probleem vind ik nu de naamgeving, als ik 1 pagina moet hebben klopt new Page() perfect maar mag dit ook gewoon als ik meerdere pagina objecten ophaal?
Of moet ik hier een apart model pages.mdl.php voor maken?
En hoe doe ik het met settings? Settings.mdl.php bevat 1 rij uit de database met informatie over mijn website, zoals title, description, language,... echter is Setting een betere naam (classe namen altijd enkelvoud houden), maar dan dekt het weer niet de content namelijk dat het meerdere Settings zijn.
Ik hoop dat mijn probleem een beetje duidelijk is. En iemand meer opheldering kan geven wat nu de mooiste manier is.
je kan aan en pagina NOOIT alle paginas vragen!
want en PAGE is maar 1 pagina.
Dat is dus ook het geen waar ik mee in mijn maag zit, maar hoe ga ik het dan oplossen?
bv oPage1, oPage2, oPage3 etc...
of en pageBeheerder oid moeten maken en daar alle pages in zetten.
Page_Provider->find($id) -> geeft 1 Page terug
Page_Provider->find_all(array('parent' => 24)) -> geeft array terug met Page-objecten
Je hoeft ze op zich niet eens echt te scheiden (dus twee klassen te maken per model) Ik heb het zelf gedaan door alle models van één abstract model te laten erven. Dat ene abstracte model heeft twee static methods, find & find_all, en omdat alle modellen van dat abstracte model overerven kan het abstracte model bij de protected methods van de modellen. Ieder model heeft 2 verplichte methods, _table_name & _properties, waarbij de eerste de table-naam teruggeeft, en de tweede een array met kolommen uit de database.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Bedrijf extends IHG_Record {
protected function _table_name() {
return 'Bedrijven';
}
protected function _properties() {
return array('id', 'naam', 'url');
}
}
$alle_bedrijven = IHG_Record::find_all($pdo, 'Bedrijf', array());
$een_bedrijf = IHG_Record::find($pdo, 'Bedrijf', array('id' => 24));
?>
class Bedrijf extends IHG_Record {
protected function _table_name() {
return 'Bedrijven';
}
protected function _properties() {
return array('id', 'naam', 'url');
}
}
$alle_bedrijven = IHG_Record::find_all($pdo, 'Bedrijf', array());
$een_bedrijf = IHG_Record::find($pdo, 'Bedrijf', array('id' => 24));
?>
En om niet overal een instantie van $pdo mee te nemen waar ik modellen wil ophalen, heb ik een Provider-"component" gemaakt wat als het ware door de hele applicatie beschikbaar is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class IHG_Record_Provider {
public function __construct($pdo, $record_type) {
}
public function find($conditions) {
return IHG_Record::find($this->pdo, $this->record_type, $conditions);
}
}
$this->app->bedrijven = new IHG_Record_Provider($pdo, 'Bedrijf');
// en dan bijv. in een controller
$this->bedrijven->find(array('id' => 24));
?>
class IHG_Record_Provider {
public function __construct($pdo, $record_type) {
}
public function find($conditions) {
return IHG_Record::find($this->pdo, $this->record_type, $conditions);
}
}
$this->app->bedrijven = new IHG_Record_Provider($pdo, 'Bedrijf');
// en dan bijv. in een controller
$this->bedrijven->find(array('id' => 24));
?>
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Ik denk dat ik maar voor de oplossing ga die het makkelijkste door te voeren is in mijn huidig systeem nl:
page.mdl.php
pages.mdl.php die dan voor elke rij een instantie van page.mdl.php aanmaakt en uiteindelijk het geheeltje in een array returned.
Lijkt me dat de logica dan weer een stukje beter is.