Slim 3 PHP-Framework und Plates als Template Engine – Skelett

Geschrieben am 10.02.2016 um 12:33 von

Slim 3 - tolles PHP Framework

Wer große Websites programmiert, der greift gerne zu großen und bekannten PHP Frameworks, wie etwa Laravel, Symphony oder Phalcon PHP – da bin ich nicht anders. Man bekommt in der Regel schnell Funktionen implementiert, muss sich um vieles nicht kümmern, hat allerdings den ein oder anderen Ballast bzw. einen Haufen Funktionen, den man nicht verwendet. Für kleine Tools und kleine Websites bin ich mittlerweile dazu übergegangen auf „Micro Frameworks“ zu setzen. In den USA – zumindest mein subjektives Gefühl – sind Micro Frameworks viel häufiger im Einsatz. In Deutschland wird das Thema kaum behandelt. Wenn man Wörter, wie „Slim PHP-Framework“ oder „Lumen“ hört, dann meist in Zusammenhang mit der Umsetzung von API oder Micro Services.

In meinen Augen wird das allerdings unterschätzt. Die Micro Frameworks bieten alle wichtigen Grundfunktionen direkt an. Was man braucht kann man sich via Composer dazu holen und verwenden. Der Vorteil – man hat eine recht kleine feine Basis, in die sich jeder recht schnell einarbeiten kann. Das gesamte System ist super schnell und klein.

Auf github.com hab ich kürzlich ein Beispiel für einen „Startpunkt“ auf Basis meines aktuellen Lieblings-Micro Frameworks „Slim 3“ sowie der Template Engine „Plates PHP“. Auf ein großes ORM á la Doctrine habe ich verzichtet. Da kommt eine kleine feine DB-Klasse in die ich mich verliebt habe. Informationen zu den wichtigsten Komponenten findet man hier:

Auf monolog habe ich in dem Fall ebenfalls verzichtet und verwende den normalen Error-Handler des Frameworks. Das schöne ist, dass in der Datei app/dependencies.php jeder für sich beispielsweise statt Plates Twig oder Smarty als Template Engine einsetzen kann. Gleiches gilt auch für den Datenbank-Singleton. Hier empfiehlt sich mal der Blick in die Doku von Slim 3 bzw. einige Tutorial des Entwicklers. Vor allem dann, wenn man auf Doctrine oder vergleichbares setzen will:

Zum Slim 3 – Startpunkt

In dem „Startpunkt“ den ich vorbereitet habe, kann man sich mein simples Beispiel für den Pfad „/home“ anschauen. In der app/routes/get.php ist die Route folgendermaßen definiert:

$app->get('/home', 'App\Controller\homeController:index');

In der composer.json findet man für die Controller den Pfad app/controller/ – entsprechend ist der jeweilige Namensraum definiert. Insofern schaut man sich mal die app/controller/homeController.php:

namespace App\Controller;

class homeController extends abstractController 
{

 public function index($request, $response, $args)  
 {    
   $model = new \App\Model\homeModel($this->db);
   $model->getHomeData();    $model->getMoreData();
   $this->modelData = $model->getModelData();

   $view = new \App\View\homeView($this->modelData);
   $view->makeHTMLElement();
   $this->templateData = $view->getTemplateData();

   return $this->view->render('demo::index', [
       'data' => $this->templateData    
   ]);  
 }

}

Kurze Erklärung zum Aufbau/Funktionsweise

Was passiert? Die Klasse erweitert die abstrakte Klasse „abstractController“ – dort werden im Konstruktor das Datenbank-Singleton sowie Plates im Singleton (view) geladen und zur Verfügung gestellt. Das wird man bei allen weiteren Controllern vermutlich brauchen und kann es bei Bedarf erweitern.
Im homeController wird die Model-Klasse geladen, diese bekommt den Datenbank-Singleton mit und kann dann irgendwelche Daten aus der DB holen. Diese werden dann über $model->getModelData() als ganzes in ein Array gespeichert und an die View-Klasse übergeben. Dort werden dann die Elemente generiert, Daten gesetzt etc. pp. und wiederum über $view->getTemplateData() abgeholt und an den Renderer – also unsere Template Engine übergeben, wo das ganze dann gerendert wird.

An sich ist das natürlich keine richtige MVC-Struktur – welche im Grunde ohnehin schwer realisierbar ist, wenn man sich die gesamte Theorie hinter MVC anschaut. Auf reddit.com gibt es massenweise Beiträge zu dem Thema, die kontrovers diskutiert werden. Aus den Unzulänglichkeiten dieser Struktur, so wie man sie oft in PHP sieht, entstanden dann Abwandlungen, wie etwa MVP, MVVM etc. Das soll aber nicht das Thema sein, ich persönlich finde, dass die oben gezeigte Struktur für viele Apps ausreichend und übersichtlich ist, so lange man Funktionen, die immer wieder verwendet werden, z.B. als eigene Klassen implementiert. Ich hab dazu den src/-Ordner. Hier kann natürlich jeder anpassen und umsetzen, wie er will. Es ist lediglich ein Vorschlag.

Slim 3: Was sagst du?

Bei Fragen: Gerne E-Mail oder Kommentar hinterlassen.
Und bitte: Keine ausfälligen Bemerkungen, dass es kein MVC ist, dass kein Doctrine/Eleoquent/… eingesetzt wurde,… Das kann am Ende jeder für sich implementieren – sie dazu Links oben.
Mich würde aber interessieren, falls hier ein PHP Entwickler vorbeischaut:
– Was sollte beachtet werden?
– Was würdest du warum anders machen?
– Wichtig ist – wir wollen keine Flughafensoftware programmieren, sondern relativ einfache Tools á la „SEO Tool v2„.
– Nutzt ihr Micro-Frameworks oder geht es aus Prinzip aktuell nur mit Laravel?
– Würdet ihr in Zukunft einige Versuche mit Slim, Lumen und Co. wagen?

Ahja: Die obige Kombination läuft problemlos mit PHP 7.0.3. – wenn schon, denn schon!

"Slim 3 PHP-Framework und Plates als Template Engine – Skelett" bewerten

Der Artikel ist schlecht!Der Artikel ist verbesserungswürdig!Der Artikel ist ganz gut.Der Artikel ist richtig gut!Der Artikel ist perfekt! Danke! (3 Bewertungen mit durchschnittlich 5,00 von 5 Sternen)
Loading...

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

Benachrichtige mich zu:
avatar
wpDiscuz
© 2016 » Die Seite rennt auf PHP 7 und HTTP 2.0 ♥