Youthweb-Blog

Zurück zur Übersicht

Wie man ein Framework wechselt

verfasst von Art4 07.12.2017 14:22:29

Nach meinem letzten Blogpost über den Umstieg von FuelPHP zu Symfony habe ich mehrere Rückmeldungen bekommen, für die ich mich bedanken möchte. Einige User hatten Fragen, wie so ein Umstieg eigentlich funktioniert. Daher möchte ich in diesem Blogpost etwas genauer erklären, was wir da eigentlich machen.

Der Wechsel eines Frameworks mag für Leute, die sich nicht mit Software-Entwicklung beschäftigen, etwas unverständlich klingen. Im folgenden werde ich daher beschreiben, was auf dem Youthweb-Server so passiert. Ich halte die Beschreibung möglichst einfach und erhebe daher auch keinen Anspruch auf eine technisch einwandfreie Erklärung. 😁

Was ist ein Framework?

Ein Framework ist wie ein Kasten voller Werkzeuge und einer allgemeinen Empfehlung bzw. Anleitung, wie man daraus eine Webseite bauen kann. Unsere Aufgabe besteht also darin, diese Werkzeuge zu benutzen, um daraus Youthweb zu bauen.

So hat Youthweb mit FuelPHP funktioniert:

Bei 1) fragt der Browser beim Youthweb-Server nach einer Webseite. Der Server baut nun mithilfe der Werkzeuge von FuelPHP diese Seite zusammen und schickt sie bei 2) wieder an den Browser zurück, wo sie dann angezeigt wird.

Als wir Anfang November mit Youthweb 4.108* zum ersten Mal Symfony eingesetzt haben, sah das ungefähr so aus:

Wir haben mit Symfony ein LegacyBundle erstellt, dass alle Anfragen 1) vom Browser an den Youthweb-Server entgegengenommen hat. Dann hat das LegacyBundle mit 2) die Anfrage an FuelPHP geschickt und dann die Webseite bei 3) wieder entgegengenommen. Anschließend wurde die Webseite bei 4) wieder an den Browser geschickt.

Damit konnten wir schon testen, ob Symfony richtig arbeitet und es hat uns den Weg zum nächsten Schritt ermöglicht:

Mit Youthweb 5.0 (das wir seit dieser Woche einsetzen) haben wir mit Symfony ein AppBundle erstellt, das bei 1) anstelle des LegacyBundles alle Browseranfragen annimmt. Das AppBundle ist aber noch ziemlich klein und kann noch nicht viel. Es ist aber schon in der Lage, einige Anfragen selbstständig zu beantworten, wie zum Beispiel den neuen Login. Solche Anfragen beantwortet das AppBundle direkt bei 2a).

Die meisten Bereiche von Youthweb befinden sich aber noch in FuelPHP, weshalb das AppBundle alle Anfragen, die es nicht selber beantworten kann, mit 2b) an das LegacyBundle schickt. Das LegacyBundle kann jetzt die Anfrage mit 3) an FuelPHP schicken und bekommt mit 4) eine Antwort. Diese Antwort baut das LegacyBundle zu einer Webseite zusammen und schickt es mit 5) an den Browser zurück.

Durch das LegacyBundle haben wir eine Trennung zwischen dem alten FuelPHP und dem neuen AppBundle geschaffen, damit diese Bereiche nicht direkt aufeinander zugreifen können. Trotzdem braucht das AppBundle manchmal noch Daten aus FuelPHP. Dafür haben wir im LegacyBundle eine Bridge gebaut, mit der Anfragen vom AppBundle an FuelPHP geschickt werden können.

Hier kommt nun ein stark vereinfachter Ausschnitt der Bridge-Klasse, die mit der Methode handleRequest() die Anfragen an FuelPHP weiterleiten kann. Außerdem kann sie mit der Methode handleClosure() Code im Kontext von FuelPHP ausführen.

<?php
/**
 * Copyright (C) Youthweb e.V. 2004 - 2017
 * All rights reserved.
 */

namespace LegacyBundle;

/**
 * Bridge to FuelPHP
 */
class Bridge
{
    /**
     * Send a Request to FuelPHP
     * @param Request $request
     * @return Response
     */
    public function handleRequest(Request $request)
    {
        $this->bootFuelphpIfNeeded();

        return $this->sendRequest($request);
    }

    /**
     * Execute a Closure in context of FuelPHP
     * @param Closure $callback
     * @return mixed
     */
    public function handleClosure(\Closure $callback)
    {
        $this->bootFuelphpIfNeeded();

        return $callback();
    }

    // Hier wurde zur besseren Übersicht Code weggelassen
}

Unsere Aufgabe besteht jetzt darin, alle Teile aus FuelPHP in das AppBundle zu verschieben. Dazu sind einige Umbauarbeiten notwendig, die wir Stück für Stück angehen werden. Mit der Zeit wird das AppBundle also immer mehr Anfragen selber beantworten können. FuelPHP muss immer weniger machen, bis wir es irgendwann komplett entfernen können. Gleichzeitig wird dann auch das LegacyBundle nicht mehr benötigt und kann dann gelöscht werden.

Ziel ist es, dass das AppBundle mit 1) alle Anfragen des Browsers annehmen kann und mit 2) selber beantworten kann. Ab diesem Zeitpunkt ist Wechsel vollständig abgeschlossen.

Du kannst mithelfen

Wie du dir vielleicht vorstellen kannst, wird der Umbau einige Zeit dauern. Wenn du Ahnung von Webentwicklung (PHP, JS) hast, dann kannst du aber bei der Entwicklung von Youthweb mitarbeiten. Youthweb lebt dank vieler freiwilliger Helfer. Schreib uns einfach an, denn wir sind immer auf der Suche nach neuen motivierten Mitarbeitern.

Hat dir dieser Beitrag gefallen oder hast du noch eine Frage? Dann hinterlasse uns einfach einen Kommentar.

*) Die aktuelle Youthweb-Version kann man z.B. über unsere CSS-Datei herausfinden.

2 Kommentare

Vergebung

Jeremia3134

Kennst du das auch? Zwar bin ich ein lebendiges Kind Gottes, aber wie oft scheitere ich an meinen festgefahrenen Gewohnheiten und Verhaltensweisen. Wie oft bin ich wieder einmal niedergeschlagen, weil ich mich an Gott versündigt habe. Wie oft habe ich M…

4 Kommentare