[[Vorlage(Getestet, bionic, focal)]] {{{#!vorlage Wissen [:Terminal:Ein Terminal öffnen] [:PHP:PHP installieren und gebrauchen] [:Composer:PHP-Pakete verwalten mit Composer] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(./laminas-foundation-logo.png, 90, align=left)]] [https://getlaminas.org/ Laminas] {en} (deutsch: „Schichten“ oder „Lagen“), ehemals Zend Framework, ist ein Bündel professioneller Programm-Bibliotheken für die Skriptsprache [:PHP:]. Die flexible Architektur dieses Frameworks ermöglicht es Entwicklern, je nach Bedarf von den derzeit über 60 verfügbaren offiziellen Paketen einzelne auszuwählen und zu nutzen. Laminas zählt damit zu den sogenannten Komponenten-orientierten Frameworks, hat aber auch sämtliche Module integriert, um sofort eine Anwendung nach dem Model View Controller Muster (MVC) zu starten. Laminas setzt konsequent das OOP-Paradigma (Objektorientierte Programmierung) um, folgt den [https://www.php-fig.org PHP-FIG] {en} Standards und implementiert die [wikipedia:PHP_Standard_Recommendation:PSR-7]-Spezifikationen. Das Framework ist Open Source ([:Lizenzen/#BSD-Lizenz:New BSD License]) und wird auf [github:laminas:Github] {en} gehostet. Laminas wird unter dem Dach der [https://www.linuxfoundation.org/ Linux Foundation] {en} aktiv weiterentwickelt und gehört mit nach eigenen Angaben 400 Millionen aktiven Installationen zu dem wichtigsten Frameworks in der PHP-Welt. = Die verschiedenen Versionen = == Zend Framework == Bis Anfang 2020 hatte Laminas noch den Namen Zend Framework und wurde von der US-amerikanischen Firma Zend gesponsert. Zwar sind sämtliche Zend Framework Pakete noch auf Github verfügbar, diese sind aber dort archiviert und werden nicht mit Updates versorgt und sollten daher nicht mehr verwendet werden. {{{#!vorlage Warnung Bis einschließlich Ubuntu 18.10 ist noch Zend Framework 1 in den Paketquellen (universe) enthalten und hat dort den Paketnamen '''zend-framework'''. Ebenso sind auch vereinzelte Komponenten von Zend Framework 2 aus den Ubuntu Paketquellen installierbar ('''php-zend-*''', universe). Alle dies Pakete werden nicht mehr mit Updates versorgt und sollten auf keinen Fall mehr genutzt werden. }}} == Migration von Zend Framework zu Laminas == Für bestehende Zend Framework Projekte wird eine Migration zu Laminas empfohlen, was relativ schnell und mit wenig Aufwand möglich ist. Eine detaillierte Anleitung gibt es dazu im Unterartikel [:Laminas/Migration_von_Zend_Framework_zu_Laminas:]. == Weitere Projekte == Neben den Einzelkomponenten sowie des MVC-Frameworkes gibt es noch folgende Unterprojekte: * [https://www.mezzio.dev/ Mezzio] {en} (ehemals Zend Expressive) - für kleinere Web-Anwendungen und Microservices * [https://api-tools.getlaminas.org/ Laminas API Tools] {en} (ehemals apigility) - zum Erstellen von API-basierten Anwendungen Auf diese Unterprojekte wird in diesem Artikel nicht weiter eingegangen. = Systemvoraussetzungen = Laminas benötigt eine funktionierende [:PHP:PHP-Installation]. Laminas gibt als Mindest-PHP-Version 5.6 an. Diese Version ist jedoch veraltet, wird nicht mehr mit Sicherheitsaktualisierungen versorgt und sollte keinesfalls mehr genutzt werden. Besser ist es, mindestens die derzeit von Ubuntu unterstützten Versionen zu nutzen, namentlich PHP 7.2 unter Ubuntu 18.04 und PHP 7.4 unter Ubuntu 20.04. Für Webanwendungen, was der der übliche Einsatz von Laminas ist, wird zusätzlich ein laufender [:Serverdienste:Webserver] benötigt, idealerweise [:Apache_2.4:Apache] mit der [:Apache/mod_rewrite:mod_rewrite]-Erweiterung. = Einzelne Komponenten nutzen = Laminas empfiehlt für die Installation und Verwaltung seiner Komponenten die PHP-Paketverwaltungssoftware [:Composer:Composer]. Eine Installation ist aber auch direkt mit [:Git:] oder per einfachen Download möglich. Eine Übersicht aller Komponenten befindet sich in der [https://docs.laminas.dev/components/ offiziellen Dokumentationsseite] {en}. Die Installation mit Composer im Terminal ist denkbar einfach: {{{#!vorlage Befehl composer require laminas/laminas-UND-PAKETNAME }}} `UND-PAKETNAME` mit dem gewünschten Paket ersetzen, zum Beispiel {{{#!vorlage Befehl composer require laminas/laminas-captcha }}} um das [https://docs.laminas.dev/laminas-captcha/ Captcha-Modul] {en} von Laminas zu installieren. In dem Skript, in dem man die Bibliothek(en) von Laminas nutzen möchte, bindet man nun die von Composer erstellte Datei '''vendor/autoload.php''' ein und schon hat man Zugriff auf sämtliche mittels Composer installierten Laminas-Klassen. Ein Beispiel-Skript könnte so aussehen: {{{#!code php 'Test', 'wordLen' => 6, 'timeout' => 300, ]); $captchaWidget = $captcha->generate(); // ...usw. }}} = Eine MVC-Webanwendung erstellen = Laminas hat alle Komponenten an Bord, um [wikipedia:Webanwendung:Webanwendungen] nach dem [wikipedia:Model View Controller:Modell-Präsentation-Steuerung]-Muster (MVC) zu erstellen. So gibt es beispielsweise einen flexiblen Router, Controller-Bibliotheken und ein Template-System. Laminas bietet mit der sogenannten [https://docs.laminas.dev/tutorials/getting-started/skeleton-application/ Laminas MVC Skeleton Application ] {en} ein fertiges Projekt-Gerüst, mit dem sofort eine funktionsfähige Webanwendung nach dem MVC-Prinzip erstellt werden kann. == Installation == Mittels [:Composer:Composer] geht man wie folgt vor: {{{#!vorlage Befehl composer create-project -s dev laminas/laminas-mvc-skeleton GEWÜNSCHTEN/PFAD/EINGEBEN }}} Es werden nun alle benötigten Abhängigkeiten installiert und eine Installations-Routine fragt in Englisch mehrere Einstellungsmöglichkeiten ab. Als erstes wird abgefragt, ob man nur eine Minimal-Installation möchte, mit der zwar eine MVC-Anwendung auch sofort laufen würde, aber zahlreiche Zusatzmodule nicht installiert werden. Zum Beispiel wird '''laminas-db''', die Datenbankverwaltungsbibliotheken von Laminas, dann nicht per Default installiert. {{{ Do you want a minimal install (no optional packages)? Y/n }}} Bestätigt man hier mit "Y", werden keine weiteren Eingaben erfragt (außer die, ob die GIT-Historie gelöscht werden soll) und die Minimal-Installation wird automatisch durchgeführt. Sollten zusätzliche Komponenten benötigt werden, so wähle man "n" und es werden zahlreiche selbsterklärende Optionen angeboten. Bitte beachten, dass bei der Installationsroutine der [#Der-development-mode „development mode“] automatisch aktiviert wurde. Es empfiehlt sich, die Laminas Developer Tools - [#Laminas-Developer-Tools wie weiter unten erklärt] - gleich mit installieren zu lassen. == Apache konfigurieren == Zunächst das Apache-Modul mod_rewrite aktivieren - [:Apache/mod_rewrite:Anleitung]. Nun sicherstellen, dass Apache lokale .htaccess-Konfigurationsdateien erlaubt. Dies geschieht dadurch, dass in der Apache Konfigurationsdatei '''/etc/apache2/apache2.conf''' für das Verzeichnis '''/var/www/''' die Einstellung `AllowOverride` mindestens auf `FileInfo` gestellt wird, in etwa so: {{{#!code apache #Diesen Bereich suchen oder neu einfügen ... AllowOverride FileInfo #AllowOverride so ändern oder einfügen ... }}} Wenn man aus Sicherheitsgründen auf seinem Apache Server nicht überall .htaccess-Konfigurationsdateien erlauben möchte, so kann man im Verzeichnis''' /etc/apache2/conf-available''' eine Konfigurationsdatei anlegen, die dies nur für das gewünschte Verzeichnis erlaubt, zum Beispiel so: {{{#!code apache AllowOverride FileInfo }}} Anschließend die Konfigurationsdatei mittels folgenden Konsolenbefehl aktivieren: {{{#!vorlage Befehl sudo a2enconf NAME-DER-NEUEN-KONFIGURATIONS-DATEI }}} Nach allen Konfigurationsänderungen muss Apache die Einstellungen neu einlesen. Dies ist wie folgt möglich: {{{#!vorlage Befehl sudo service apache2 reload }}} [[Vorlage(Warnung,"Für eine Laminas-Anwendung, die per Apache aus dem Internet erreichbar ist, sollte __nur__ das Unterverzeichnis '''public/''' innerhalb der Laminas-Applikation erreichbar sein. Ein Zugriff auf die Verzeichnisse '''config/''', '''vendor/''', usw. kann ein erhebliches Sicherheitsrisiko darstellen. ")]] == Den eingebauten Server von PHP nutzen == Alternativ kann man zu Testzwecken auch den eingebauten [https://www.php.net/manual/de/features.commandline.webserver.php Server von PHP] {de} nutzen, was recht komfortabel ist, da er zahlreiche Debuging-Informationen in der Konsole ausgibt. Laminas liefert dazu ein Composer-Skript mit, das wie folgt im Wurzelverzeichnis der Laminas-Anwendung ausgeführt werden kann: {{{#!vorlage Befehl composer serve }}} Es ist aus Sicherheitsgründen jedoch ratsamer, den Server im Gegensatz zum Composer-Skript von Laminas besser nur auf der Adresse 127.0.0.1 laufen zu lassen und zwar folgendermaßen: {{{#!vorlage Befehl php -S 127.0.0.1:8080 -t public public/index.php }}} Die Port-Angabe - hier 8080 - kann natürlich nach eigenem Gusto verändert werden. Für das Composer-Skript hierfür in der Datei '''composer.json''' im Hauptverzeichnis der Laminas-MVC-Anwendung im Bereich "scripts" den Eintrag "serve" entsprechend ändern. [[Vorlage(Warnung,"Aus Sicherheitsgründen niemals den PHP Server für Produktiv-Server oder für Rechner, die über den Port, den der PHP-Server nutzt, aus dem Internet erreichbar sind, nutzen.")]] == Die Anwendung aufrufen == Nun kann in einem beliebigen Webbrowser die MVC-Anwendung aufgerufen werden. `http://127.0.0.1/PFAD/ZUM/Laminas-PROJEKT` wenn man Apache nutzt oder `http://127.0.0.1:8080` wenn man den PHP-Server mit dem Port 8080 nutzt. Wenn alles geklappt hat, erscheint folgende Seite: [[Bild(laminas-mvc-screenshot.png, 760, center)]] Die Laminas-MVC-Anwendung ist modular aufgebaut. Üblicherweise geht es nun im Verzeichnis '''module/''' weiter. Dort kann man das bestehende Modul '''Application/''' modifizieren oder neue Module anlegen. = Problembehebung = == Fehler finden und diagnostizieren == Laminas bietet zwei eigene Werkzeuge zum debuggen von Laminas-MVC-Anwendungen an: === Der development mode === [[Vorlage(Warnung,"Den development mode, der bei Neuinstallationen der Laminas MVC Skeleton Application immer automatisch aktiviert wird, in produktiven beziehungsweise über das Internet öffentlich zugänglichen Laminas-Anwendungen unbedingt wieder deaktivieren.")]] Ist der sogenannte [github:laminas/laminas-development-mode:development mode] {en} der MVC-Anwendung aktiviert, so wird der Cache deaktiviert, zusätzliche Informationen bei Programmfehlern ausgegeben, sowie alle Konfigurationsdateien im Verzeichnis '''config/''' mit berücksichtigt, die die Endung '''development.local.php''' oder '''development.global.php''' haben. Dies ist hilfreich bei der Fehlersuche. Der development mode wird bei der Installation der automatisch aktiviert. Den development mode aktivieren: {{{#!vorlage Befehl composer development-enable }}} Den development mode deaktivieren: {{{#!vorlage Befehl composer development-disable }}} Überprüfen, ob der development mode aktiviert ist: {{{#!vorlage Befehl composer development-status }}} Alle diese Befehle müssen im Wurzelverzeichnis (in dem sich die '''composer.json''' befindet) ausgeführt werden. === Laminas Developer Tools === [[Vorlage(Warnung,"Die Laminas Developer Tools niemals in produktiven beziehungsweise über das Internet öffentlich zugänglichen Laminas-Anwendungen aktiviert lassen.")]] Laminas bietet mit dem Modul [github:laminas/laminas-developer-tools:Laminas Developer Tools] {en} ein Werkzeug-Set an, mit dem man Fehler in MVC-Anwendungen finden kann. Am besten gleich bei der [#Eine-MVC-Webanwendung-erstellen Installation der MVC-Anwendung] die Laminas Developer Tools mit installieren lassen. Dazu in der Installationsroutine folgende Abfrage mit `y` bestätigen: {{{ Would you like to install the developer toolbar? y/N }}} Das Modul muss der Laminas-MVC-Anwendung bekannt sein. Deshalb fragt die Installationsroutine ab: {{{ Please select which config file you wish to inject 'Laminas Developer Tools' into: [0] Do not inject [1] config/modules.config.php [2] config/development.config.php.dist Make your selection (default is 0):1 }}} Entweder mit `1` '''config/modules.config.php''' auswählen oder mit `2` '''config/development.config.php.dist'''. Letzteres ist empfehlenswerter, da dann die '''Laminas Developer Tools''' nur im sogenannten „development mode“ geladen werden [#Der-development-mode (siehe oben)]. === Nachträgliche Installation === Hat man dies versäumt, so kann man die Developer Tools nachträglich wie folgt installieren: {{{#!vorlage Befehl composer require --dev laminas/laminas-developer-tools }}} Auch hier wird wieder abgefragt, mit welcher Konfigurationsdatei die Laminas Developer Tools installiert werden sollen - siehe oben. Abschließend noch die mitgelieferte Konfigurationsdatei in das Verzeichnis '''config/''' kopieren, was wie folgt auf der Konsole möglich ist, wenn man sich im Wurzelverzeichnis der Laminas MVC-Anwendung befindet: {{{#!vorlage Befehl cp ./vendor/laminas/laminas-developer-tools/config/laminas-developer-tools.local.php.dist ./config/autoload/laminas-developer-tools.local.php }}} Ist das Modul installiert, so findet man bei Aufruf der MVC-Web-Anwendung nun eine Werkzeugleiste unten im Fußbereich der Anwendung, die zahlreiche Debugg-Informationen bereit hält: ##[[Bild(Laminas-developer-tools.png, 1200, center)]] == Abhängigkeiten werden nicht installiert == Leider kann es vorkommen, dass trotz des Gebrauchs von Composer Abhängigkeiten nicht vollständig mit installiert werden. Zum Beispiel wird beim regulären Gebrauch mit Laminas Captcha (siehe oben) folgender Fehler ausgegeben: {{{ PHP Fatal error: Class 'Laminas\Validator\AbstractValidator' not found in /PFAD/ZUM/PROJEKT/vendor/laminas/laminas/src/AbstractAdapter.php on line X }}} Dies liegt meist daran, dass Laminas die eigentlich für den Gebrauch benötigten Abhängigkeiten in den jeweiligen Komponenten-'''composer.json''' teilweise nur als `require-dev` deklariert und nicht im `require`-Bereich. Dies ist jedoch oftmals übliche Praxis in der Composer-Welt und in vielen Fällen auch so erwünscht. Man muss die fehlenden Abhängigkeiten dann mittels `composer require PAKET-BETREUER/PAKET-NAME` nachinstallieren. Aufschluss über fehlende Komponenten gibt unter Umständen der Befehl: {{{#!vorlage Befehl composer suggests }}} = Links = == Intern == * [:Laminas/Migration_von_Zend_Framework_zu_Laminas: Zend Framework-Projekte zu Laminas migrieren] == Extern== * [https://getlaminas.org/ Projektseite] {en} * [https://docs.laminas.dev/ Dokumentation] {en} * [https://getlaminas.org/blog Blog] {en} * [https://docs.laminas.dev/tutorials/ Tutorials zur Erstellung von MVC-Anwendungen] {en} * [github:laminas:Quellcode] {en} auf Github * [https://laminas.slack.com/ Offizieller Slack-Channel], {en} in der Regel schnelle Antworten der Entwickler #tag: PHP, Composer, Webanwendung, Framework, Internet, Installation, Server, Programmierung