Datasource - Anwendungsbeispiel¶
Im folgenden wird ein Beispiel beschrieben zur Erstellung einer einfachen Datasource auf Basis eines bestehenden Models.
Dateistruktur¶
Folgende Dateistruktur ist gegeben. {PROJEKTNAME} steht hier als Platzhalter.
│ ├─ application │ └ config │ ├ alvine-platform │ └ route (Routendefinition) XML Dateien │ └ legacy │ ├ resource │ └ template │ └ {PROJEKTNAME} │ └ etc │ └ builder (Builder - JSON Konfiguration) │ └ var │ └ builder │ └ templates (Builder - Templates HTML Fragmente) │ ├ source │ └ builder │ └ datasource (Builder - Datasource PHP Klassen)
Zusammenfassung der notwendigen Schritte¶
- Datasource im eigenen Namespace anlegen
- HTML - Template Fragment anlegen
- Builder - Json Konfiguration anlegen
- Route Konfigurieren
- Builder - HTML - Fragment generieren
1. Beispiel: Datasource im eigenen Namespace anlegen¶
Datasource - Klassen sollten wenn Customized im Projektpfad in folgendem Pfad abgelegt werden: application/source/builder/datasource/...
Folgende Beispielklasse zeigt anhand des Models Company die Basisdefinition und Methoden für eine angepasste Datasource zur weiteren Nutzung.
´ <?php
namespace CustomisationBuilderDataSourceCommerce;
class Company extends AlvineApplicationPlatformBuilderDataSourceFromModel {
//
/**
* injectDataSourceCompanyData
* @param type $data
* @return \Alvine\Types\Map
*/
public function injectDataSource_CompanyData($data): \Alvine\Types\Map {
//Initialisieren des Company Managers und Ergänzend es Datasets um notwendige Felder zur Ausgabe
$companyManager = \Alvine\Application\Assembly::getInstance()->getCompanyManager();
$company = $companyManager->getCompanyByID($data->shid);
$companyManager->initCompanyData($company,$this->context->getLocale());
$data->setValue('contactFon1', $company->contactFon1);
$data->setValue('contactMail', $company->contactMail);
return $data;
}
/*
* finalizeDataSource_xyz
*/
public function finalizeDataSource_xyz($data): \Alvine\Types\Map {
//Beispiel finalizeDataSource Aufruf wird aufgerufen nach allen injectDataSource
return $data;
}
/**
* liefert ein Model zurück
*
* @return \Alvine\Application\Platform\Model\Entity Model
*/
public function getModel(): \Alvine\Application\Platform\Model\Entity {
return new \Alvine\Application\Platform\Model\Company\Company();
}
/**
* Diese Methode bietet die Möglichkeit
* die Daten nochmal vor der Rückgabe
* manipulieren zu können
*
* @param \Alvine\Types\Map $data
*
* @return \Alvine\Types\Map $data
*/
public function finalize($data): \Alvine\Types\Map {
parent::finalize($data);
//Finalize ruft die finalizeDataSource methoden auf. Kommt also danach
//Alle anderen finalizeInject - Methoden sind schon gelaufen . Letzter Verarbeiter!
return $data;
}
// </editor-fold>
} ´