|
|
MetaGer basiert auf dem PHP-Framework [Laravel](https://www.laravel.com/)
|
|
|
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.2 ](https://www.laravel.com/docs/5.2 )
|
|
|
Dabei kratze ich nur an der Oberfläche des Frameworks selbst. Für eine genaue Dokumentation besuche [https://www.laravel.com/docs/5.4 ](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:
|
|
|
|
... | ... | @@ -10,19 +10,19 @@ Zunächst werden hier der User-Agent und die IP-Adresse des Abfragenden anonymis |
|
|
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`.
|
|
|
|
|
|
### Verarbeitung des aufgerufenen Pfades `/app/http/routes.php`
|
|
|
An dieser Stelle werden die übergebenen [Pfade](https://www.laravel.com/docs/5.2/routing) verarbeitet und entschieden auf welche Art die Anfrage beantwortet werden soll.
|
|
|
### Verarbeitung des aufgerufenen Pfades `/app/http/web.php`
|
|
|
An dieser Stelle werden die übergebenen [Pfade](https://www.laravel.com/docs/5.4/routing) verarbeitet und entschieden auf welche Art die Anfrage beantwortet werden soll.
|
|
|
Dabei gibt es etliche Möglichkeiten, z.B.:
|
|
|
|
|
|
1. Kann direkt ein View zurückgegeben werden
|
|
|
2. 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`
|
|
|
3. 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](https://www.laravel.com/docs/5.2/controllers) `MetaGerSearch` die Funktion `search` aufgerufen wird.
|
|
|
In unserem Fall für den Pfad `/meta/meta.ger3` ist dort definiert, dass im [Controller](https://www.laravel.com/docs/5.4/controllers) `MetaGerSearch` die Funktion `search` aufgerufen wird.
|
|
|
|
|
|
### Die eigentliche Suche `/app/Http/Controllers/MetaGerSearch.php`
|
|
|
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](https://www.laravel.com/docs/5.2/providers), sodass es bereits fertig initialisiert übergeben werden kann.
|
|
|
Das `MetaGer` Objekt ist dabei definiert als [Service Provider](https://www.laravel.com/docs/5.4/providers), sodass es bereits fertig initialisiert übergeben werden kann.
|
|
|
Ab diesem Moment läuft alles relativ > straight forward <
|
|
|
|
|
|
1. `$metager->parseFormData($request)`
|
... | ... | @@ -30,7 +30,7 @@ Ab diesem Moment läuft alles relativ > straight forward < |
|
|
2. `$metager->checkSpecialSearches`
|
|
|
* Hier überprüfen wir, ob eine besondere Art der Suche (z.B.: Stringsuche,...) durchgeführt werden soll.
|
|
|
3. `$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](https://www.laravel.com/docs/5.2/queues#pushing-jobs-onto-the-queue) die entsprechende HTTP-Request in Auftrag gegeben.
|
|
|
* Je nach Sucheinstellung werden entsprechende `Searchengine-Objekte` aus dem Verzeichnis `/app/Models/parserSkripte/` erstellt. Gleichzeitig wird, nachdem das Objekt fertig erstellt wurde, per [Dispatch](https://www.laravel.com/docs/5.4/queues#pushing-jobs-onto-the-queue) die entsprechende HTTP-Request in Auftrag gegeben.
|
|
|
4. `$metager->rankAll()`
|
|
|
* Nun wird das Ranking über alle Ergebnisse durchgeführt.
|
|
|
5. `$metager->combineResults()`
|
... | ... | |