MetaGer basiert auf dem PHP-Framework Laravel
Im folgenden wird der Weg einer Suchanfrage von Eingang des HTTP-Requests bis zum Zurücksenden der Ergebnisseite beschrieben, um eine kurze Einführung zu geben.
Dabei kratze ich nur an der Oberfläche des Frameworks selbst. Für eine genaue Dokumentation besuche https://www.laravel.com/docs/5.4
Dies soll einen generellen Überblick über die Struktur geben und erhebt keinen Anspruch auf eine vollständige Beschreibung aller ablaufenden Prozesse:
/public/index.php
Eingang des HTTP-Requests Beim Aufruf von z.B. https://metager.de/meta/meta.ger3?focus=web&eingabe=test&encoding=utf8&lang=all geht die Anfrage auf Grund der .htaccess Datei im Verzeichnis /public/
bei /public/index.php
ein.
Zunächst werden hier der User-Agent und die IP-Adresse des Abfragenden anonymisiert, damit auch wir später keinen Zugriff mehr darauf haben.
Als nächstes werden alle benötigten Klassen vom Laravel-Classloader
geladen, damit dies später nicht mehr passieren muss.
Nun müssen noch die Abhängigkeiten aufgelöst und die Einstellungen geladen werden. Dieser Prozess instanziert das Objekt App
.
/app/http/web.php
Verarbeitung des aufgerufenen Pfades An dieser Stelle werden die übergebenen Pfade verarbeitet und entschieden auf welche Art die Anfrage beantwortet werden soll.
Dabei gibt es etliche Möglichkeiten, z.B.:
- Kann direkt ein View zurückgegeben werden
- Kann die Funktion eines Controllers aufgerufen werden, welcher widerum am Ende einen View zurück gibt. Alle Controller befinden sich dabei unter
/app/Http/Controllers
- Kann zusätzlich eine Middleware definiert werden, also ein Programm welches ausgeführt werden soll nachdem die Anfrage angenommen wurde, aber bevor diese verarbeitet wird.
In unserem Fall für den Pfad /meta/meta.ger3
ist dort definiert, dass im Controller MetaGerSearch
die Funktion search
aufgerufen wird.
/app/Http/Controllers/MetaGerSearch.php
Die eigentliche Suche Laut Funktion wird an diese ein Objekt der Klasse Request
und eins der Klasse MetaGer
übergeben.
Das MetaGer
Objekt ist dabei definiert als Service Provider, sodass es bereits fertig initialisiert übergeben werden kann.
Ab diesem Moment läuft alles relativ > straight forward <
$metager->parseFormData($request)
- Hier verarbeiten wir alle mit der HTTP-Request übergebenen Parameter. (z.B.: Sucheingabe, Fokus,...)
$metager->checkSpecialSearches
- Hier überprüfen wir, ob eine besondere Art der Suche (z.B.: Stringsuche,...) durchgeführt werden soll.
$metager->createSearchEngines()
- Je nach Sucheinstellung werden entsprechende
Searchengine-Objekte
aus dem Verzeichnis/app/Models/parserSkripte/
erstellt. Gleichzeitig wird, nachdem das Objekt fertig erstellt wurde, per Dispatch die entsprechende HTTP-Request in Auftrag gegeben.
$metager->rankAll()
- Nun wird das Ranking über alle Ergebnisse durchgeführt.
$metager->combineResults()
- Die Ergebnisse aller einzelnen Suchmaschinen werden zusammen gefasst und sortiert
return $metager->createView()
- Die Daten werden gefiltert und es wird daraus ein View erstellt, der schlussendlich zurückgegeben wird.