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>
} ´