Zum Inhalt springen
Der Guide für ein smartes Leben.
PHP Alleskönner

Teil 5: PHP-Frameworks Teil VIII - Zend Framework

Autoren: Redaktion pcmagazin und Tobias Hauser • 30.11.2009 • ca. 2:00 Min

Die View finden Sie unter views und dort unter scripts. Für den index-Controller heißt die View index. Standardmäßig wird die Dateiendung .phtml verwendet. Platzhalter sind reiner PHP-Code. Mit Zend_Layout können Sie etwa den Rahmen vom Controller-basierten Inhalt trennen. Relationen Um im ...

Die View finden Sie unter views und dort unter scripts. Für den index-Controller heißt die View index. Standardmäßig wird die Dateiendung .phtml verwendet. Platzhalter sind reiner PHP-Code. Mit Zend_Layout können Sie etwa den Rahmen vom Controller-basierten Inhalt trennen.

Relationen

Um im Zend Framework die Relation zwischen der frameworks- und der licences-Tabelle abzubilden, benötigen Sie nur eine DbTable für die licences-Tabelle. Sie können auch ein Model und einen Modelmapper anlegen, notwendig sind beide nicht. In der licences-Tabelle muss die Relation zur Framework-Tabelle abgetragen sein. Dies geschieht in der Eigenschaft $_referenceMap. Sie enthält alle Relationen als Einträge.Jede Relation besitzt einen Namen (auch Regel/rule genannt). Damit wird die anzuwendende Regel später identifiziert. Die Konfigurationsangaben sind, welche Spalte verknüpft ist (columns) - dies kann auch ein Array mit mehreren Spalten sein. refTableClass verweist auf die DbTable-Klasse für die Framework-Tabelle. refColumns ist ein Wert oder ein Array mit den Spalten in der Tabelle, die die Fremdschlüssel enthalten.

PHP-Frameworks Teil VIII - Zend Framework
Einfach: Die Daten aus dem Model werden korrekt ausgegeben.
© Archiv
<?php
class Default_Model_DbTable_Licence
extends Zend_Db_Table_Abstract
{
protected $_name = 'licences';
protected $_referenceMap = array(
'LicenceFramework' => array(
'columns' => 'id',
'refTableClass' => 'Default_Model_
DbTable_Framework',
'refColumns' => 'licence_id'
)
);
}
?>

Das eigentliche Holen der Werte erfolgt im Frameworkmapper in der Methode fetchAll(). Dort wird die Relation mit der Methode findDependentRowset (Klasse, Regel) angesprochen. Erster Parameter ist die (abstrakte) Klasse, zweiter Wert ist die Regel für die gewünschte Relation.Ausgeführt wird die Methode immer auf einer Reihe des Abfrageergebnisses. Das heißt hier, pro Framework werden die zugeordneten Lizenzen geholt. Da es sich hier um eine 1-zu-1-Beziehung handelt, können Sie direkt das erste Resultat verwenden.

PHP-Frameworks Teil VIII - Zend Framework
Erledigt: Die Frameworks und Lizenzen werden ausgelesen.
© Archiv
public function fetchAll()
{
$resultSet = $this->getDbTable()->
fetchAll();
$entries = array();
foreach ($resultSet as $row) {
$entry = new Default_Model_Frame
work();
$licence_value = $row->findDependent
Rowset('Default_Model_DbTable_Licence', 'LicenceFramework');
$licence_row = $licence_value[0];
$licence_name = "test";
$entry->setFrameworkId($row->id)
->setName($row->name)
->setLicenceId($licence_row->licence_
name)
->setMapper($this);
$entries[] = $entry;
}
return $entries;
}

Der Einfachheit halber übergeben wir den Lizenznamen statt der Lizenz-ID. Hier könnten Sie noch weiter anpassen und beispielsweise die ID mit verwenden. Und auch für eine 1-zu-n-Beziehung sähe das Vorgehen genauso aus, nur, dass Sie nicht den ersten Wert aus dem Ergebnis weitergeben, sondern das gesamte Ergebnis.

Inzwischen ausgereift

Viele Jahre lang war der MVC-Ansatz im Zend Framework eher rudimentärer Natur. Dagegen gab es die flexible Datenbankabfrage und viele andere Elemente aus dem Framework schon sehr lange. Mittlerweile ist aber auch der MVC-Ansatz sehr ausgereift und muss sich nicht hinter spezialisierten Frameworks verstecken. Deswegen lässt sich das Zend Framework sowohl als kleine Beimischung, als auch als vollständige Entwicklungsbasis hervorragend verwenden.