MINI ist eine äußerst einfache und leicht verständliche Skelett-PHP-Anwendung, die auf das Maximum reduziert ist. MINI ist KEIN professionelles Framework und verfügt nicht über alle Funktionen, die echte Frameworks bieten. Wenn Sie nur ein paar Seiten anzeigen, ein paar Datenbankaufrufe durchführen und hier und da ein bisschen AJAX verwenden möchten, ohne umfangreiche Dokumentationen hochkomplexer professioneller Frameworks zu lesen, dann könnte MINI für Sie sehr nützlich sein. MINI ist einfach zu installieren, läuft fast überall und macht die Dinge nicht komplizierter als nötig.
Für eine tiefere Einführung in MINI schauen Sie sich diesen Blogbeitrag an: MINI, eine extrem einfache Barebone-PHP-Anwendung.
MINI hat einen kleineren Bruder namens TINY. Es ähnelt MINI, läuft aber ohne mod_rewrite in fast jeder Umgebung. Nicht für Live-Sites geeignet, aber gut für schnelles Prototyping.
MINI hat auch einen größeren Bruder mit dem Namen MINI2. Es ist noch einfacher, wurde mit Slim erstellt und verfügt über nette Funktionen wie SASS-Kompilierung, Twig usw.
MINI3 ist der Nachfolger von MINI und verwendet die ursprüngliche native MINI1-Anwendungsstruktur (ohne Slim unter der Haube), aber mit ordnungsgemäßem PSR-4-Autoloading, mehreren Modellklassen und echten Namensräumen.
Wenn Sie Vagrant für Ihre Entwicklung verwenden, können Sie MINI mit einem Klick (oder einem Befehl in der Befehlszeile) installieren [Vagrant-Dokument]. MINI wird mit einer Demo-Vagrant-Datei (definiert Ihre Vagrant-Box) und einer Demo-Bootstrap.sh geliefert, die automatisch Apache, PHP, MySQL, PHPMyAdmin, Git und Composer installiert, ein ausgewähltes Passwort in MySQL und PHPMyadmin und sogar im Anwendungscode festlegt. lädt die Composer-Abhängigkeiten herunter, aktiviert mod_rewrite und bearbeitet die Apache-Einstellungen, lädt den Code von GitHub herunter und führt die Demo-SQL-Anweisungen aus (für Demodaten). Dies geschieht zu 100 % automatisch. Nach +/- 5 Minuten erhalten Sie eine vollständig laufende Installation von MINI2 in einer Ubuntu 14.04 LTS Vagrant-Box.
Legen Sie dazu Vagrantfile
und bootstrap.sh
von _vagrant
in einem Ordner ab (und sonst nichts). Führen Sie vagrant box add ubuntu/focal64
, um Ubuntu 20.04 LTS 64bit zu Vagrant hinzuzufügen (sofern Sie es nicht bereits haben), und führen Sie dann vagrant up
aus, um die Box auszuführen. Wenn die Installation abgeschlossen ist, können Sie die vollständig installierte Demo-App direkt unter 192.168.33.44
verwenden (Sie können dies im Vagrantfile ändern). Da es sich nur um eine kurze Demo-Umgebung handelt, sind das MySQL-Root-Passwort und das PHPMyAdmin-Root-Passwort auf 12345678
eingestellt. Das Projekt wird in /var/www/html/myproject
installiert. Sie können dies sicher in bootstrap.sh
ändern. Schalten Sie die Box mit vagrant halt
ab
Sie können MINI einschließlich Apache, MySQL, PHP und PHPMyAdmin, mod_rewrite, Composer, alle erforderlichen Einstellungen und sogar die Passwörter in der Konfigurationsdatei installieren, indem Sie einfach eine Datei herunterladen und ausführen. Die gesamte Installation wird zu 100 % automatisch ausgeführt. Das Tutorial finden Sie in diesem Blog-Artikel: MINI in 30 Sekunden in Ubuntu 14.04 LTS installieren
application/config/config.php
_install/
-Ordner aus (z. B. mit PHPMyAdmin).MINI läuft ohne weitere Konfiguration. Sie können es auch in einem Unterordner ablegen, dann funktioniert es ohne weitere Konfiguration. Vielleicht nützlich: Ein einfaches Tutorial zur Installation von LAMPP (Linux, Apache, MySQL, PHP, PHPMyAdmin) unter Ubuntu 14.04 LTS und dasselbe für Ubuntu 12.04 LTS.
server {
server_name default_server _; # Listen to any servername
listen [::]:80;
listen 80 ;
root /var/www/html/myproject/public;
location / {
index index.php;
try_files / $uri / $uri / /index.php?url= $uri ;
}
location ~ .(php)$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
include fastcgi_params;
}
}
Eine ausführlichere Diskussion zu Nginx-Setups finden Sie hier.
Das Skript nutzt mod_rewrite und blockiert jeglichen Zugriff auf alles außerhalb des Ordners /public. Auf Ihren .git-Ordner/Ihre .git-Dateien, die temporären Dateien des Betriebssystems, den Anwendungsordner und alles andere kann nicht zugegriffen werden (bei korrekter Einrichtung). Für Datenbankanfragen wird PDO verwendet, sodass Sie nicht über SQL-Injection nachdenken müssen (es sei denn, Sie verwenden extrem veraltete MySQL-Versionen).
MINI wird mit einem kleinen angepassten PDO-Debugger-Tool geliefert (den Code finden Sie in application/libs/helper.php), das versucht, Ihre PDO-SQL-Anweisungen zu emulieren. Es ist äußerst einfach zu bedienen:
$ sql = " SELECT id, artist, track, link FROM song WHERE id = :song_id LIMIT 1 " ;
$ query = $ this -> db -> prepare ( $ sql );
$ parameters = array ( ' :song_id ' => $ song_id );
echo Helper:: debugPDO ( $ sql , $ parameters );
$ query -> execute ( $ parameters );
Das Projekt wurde zu PHP5-Zeiten geschrieben, aber mit der Veröffentlichung von PHP7 ist es nicht mehr möglich, eine Klasse „Error“ zu nennen, da PHP selbst nun eine interne Error-Klasse hat. Das Umbenennen war die einfachste Lösung im Vergleich zu anderen Optionen wie „ErrorController“ usw., die neue Probleme wie Dateinamen in Großbuchstaben usw. mit sich bringen würden (was bei manchen Setups nicht richtig funktioniert).
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Dies bedeutet, dass Sie es in privaten oder kommerziellen Projekten kostenlos verwenden und ändern können.
Übrigens blogge ich auch bei Dev Metal.
Der URL-Pfad der Anwendung wird direkt in die Controller (=Dateien) und deren Methoden innerhalb der Anwendung/Controller übersetzt.
example.com/home/exampleOne
wird das tun, was die exampleOne() -Methode in application/controllers/home.php sagt.
example.com/home
wird das tun, was die index() -Methode in application/controllers/home.php sagt.
example.com
wird tun, was die index()- Methode in application/controllers/home.php sagt (Standard-Fallback).
example.com/songs
wird das tun, was die index() -Methode in application/controllers/songs.php sagt.
example.com/songs/editsong/17
macht das, was die editsong() -Methode in application/controllers/songs.php sagt, und übergibt ihr 17
als Parameter.
Selbsterklärend, oder?
Schauen wir uns die exampleOne()-Methode im Home-Controller (application/controllers/home.php) an: Diese zeigt einfach den Header, Footer und die example_one.php-Seite (in view/home/). Absichtlich so einfach und nativ wie möglich.
public function exampleOne ()
{
// load view
require APP . ' views/_templates/header.php ' ;
require APP . ' views/home/example_one.php ' ;
require APP . ' views/_templates/footer.php ' ;
}
Werfen wir einen Blick auf die index()-Methode im Songs-Controller (application/controllers/songs.php): Ähnlich wie exampleOne, aber auch hier fordern wir Daten an. Auch hier ist alles extrem reduziert und einfach: $this->model->getAllSongs() ruft einfach die getAllSongs()-Methode in application/model/model.php auf.
public function index ()
{
// getting all songs and amount of songs
$ songs = $ this -> model -> getAllSongs ();
$ amount_of_songs = $ this -> model -> getAmountOfSongs ();
// load view. within the view files we can echo out $songs and $amount_of_songs easily
require APP . ' views/_templates/header.php ' ;
require APP . ' views/songs/index.php ' ;
require APP . ' views/_templates/footer.php ' ;
}
Der Einfachheit halber befinden sich alle Datenverarbeitungsmethoden in application/model/model.php. Das ist sicherlich nicht wirklich professionell, aber die einfachste Umsetzung. Schauen Sie sich an, wie getAllSongs() in model.php aussieht: Reines und supereinfaches PDO.
public function getAllSongs ()
{
$ sql = " SELECT id, artist, track, link FROM song " ;
$ query = $ this -> db -> prepare ( $ sql );
$ query -> execute ();
return $ query -> fetchAll ();
}
Das Ergebnis, hier $songs, kann dann problemlos direkt in den Ansichtsdateien verwendet werden (in diesem Fall application/views/songs/index.php, in einem vereinfachten Beispiel):
<tbody>
<?php foreach ( $ songs as $ song ) { ?>
<tr>
<td> <?php if ( isset ( $ song -> artist )) echo htmlspecialchars ( $ song -> artist , ENT_QUOTES , ' UTF-8 ' ); ?> </td>
<td> <?php if ( isset ( $ song -> track )) echo htmlspecialchars ( $ song -> track , ENT_QUOTES , ' UTF-8 ' ); ?> </td>
</tr>
<?php } ?>
</tbody>
MINI ist der Nachfolger von PHP-MVC. Da php-mvc keine echte MVC-Struktur bereitstellte (und mehrere Leute sich darüber beschwert haben – was völlig richtig ist!), habe ich das Projekt umbenannt und neu erstellt.
... MINI ist nur ein einfaches Hilfstool, das ich für meine tägliche Arbeit erstellt habe, einfach weil es viel einfacher einzurichten und zu handhaben war als echte Frameworks. Für die tägliche Agenturarbeit, schnelles Prototyping und Frontend-gesteuerte Projekte ist es völlig in Ordnung, erfüllt seinen Zweck und es gibt absolut keinen Grund zu diskutieren, warum es „Scheiße im Vergleich zu Laravel“ ist, warum es nicht mehreren MVC-Prinzipien folgt oder warum es keinen persönlichen, unbezahlten Support gibt oder keine russische Übersetzung oder ähnliches seltsames Zeug. Das Trolling gegen Open-Source-Projekte (und ihre Autoren) hat wirklich wahnsinnige Ausmaße angenommen.
Ich habe dies unentgeltlich und freiwillig in meiner Freizeit geschrieben und auf GitHub hochgeladen, um es zu teilen. Es ist völlig kostenlos für den privaten und kommerziellen Gebrauch. Wenn es Ihnen nicht gefällt, verwenden Sie es nicht. Wenn Sie Probleme sehen, schreiben Sie bitte ein Ticket (und wenn Sie wirklich cool sind: Ich bin für alle Zusagen sehr dankbar!). Aber beschimpfen Sie nicht, beschweren Sie sich nicht, hassen Sie nicht. Das tun nur schlechte Menschen.
Bitte verpflichten Sie sich in den Entwicklungszweig (der die in der Entwicklung befindliche Version enthält), nicht in den Hauptzweig (der die getestete und stabile Version enthält).
Dezember 2002
August 2016
Februar 2015
Dezember 2014
November 2014
Oktober 2014
September 2014
August 2014
Juni 2014
April 2014
Januar 2014
Unterstützen Sie das Projekt, indem Sie einen Server bei DigitalOcean mieten oder einfach bei BuyMeACoffee.com ein Trinkgeld für einen Kaffee geben. Danke! :) :)