Hexacore ist ein winziges PHP -Framework, das auf dem MVC -Muster basiert. Anfangs ein persönliches Projekt zur Verbesserung meines PHP mit Designmustern und den neuen Funktionen von PHP 7.0+
Ich denke, dieses Projekt kann nützlich sein, um PHP zu lernen und ein besseres Verständnis für das MVC -Muster zu haben.
Für eine einfachere Bereitstellung können Sie Docker und Docker-Compose verwenden:
Nach der Installation von Docker und Docker-Compose müssen Sie nur den folgenden Befehl zum Wurzel des Projekts ausführen
$ docker-compose upDie Website sollte dann auf http: // localhost ausgeführt werden.
Sie können dieses Framework auch mit einem WAMP/LAMP/XAMP verwenden
Nachdem Sie eine Datenbank mit MySQL erstellt haben
{
"dbname" : " myDB " ,
"host" : " db " ,
"port" : 3306 ,
"user" : " hexacore " ,
"password" : " test "
}Wie ich bereits sagte, folgt Hexacore dem MVC -Muster, bedeutet dies, dass die Anwendung in 3 Teilen geteilt ist:
Das erste, was Sie tun müssen, um die Homepage anzuzeigen, ist das Erstellen eines indexController .
Dies ist der einfachste Weg, dies zu tun:
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Response ResponseInterface ;
use Hexacore Core Response Response ;
class IndexController extends Controller
{
public function index (): ResponseInterface
{
return new Response ( " Hello world ! " );
}
} Ein Controller muss sich von der Controller -Klasse erstrecken !!
Standardmäßig werden in der URL keine Indexcontroller- und Indexaktion (die Funktion) benötigt. Die Startseite kann dann sowohl von http: // localhost als auch von http: // localhost/index/index erreicht werden. Daher bezieht sich die Zeichenfolge nach der ersten / in der URL auf den Controller und die andere Zeichenfolge in der Aktion.
Mit dem Frame -Arbeit können Sie in der URL -AVEC die GET -Variable einfügen. Der Controller und die Aktion, wie hier gezeigt:
http://localhost/user/get/athena
Sie können die Variable dann direkt als Parameter Ihrer Aktion erhalten, um die UserController -Klasse zu erhalten:
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Response ResponseInterface ;
use Hexacore Core Response Response ;
class UserController extends Controller
{
public function get ( String $ name ): ResponseInterface
{
return new Response ( " Welcome $ name ! " );
}
}Sie können so viele Parameter hinzufügen, wie Sie möchten.
Sie können diese Variablen auch mit dem Standardweg ( http://localhost/user/get?name=athena ) mit dem Anforderungsobjekt erhalten:
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Response ResponseInterface ;
use Hexacore Core Response Response ;
class UserController extends Controller
{
public function get (): ResponseInterface
{
//for a post variable submitted
//$this->request->getPost("var");
$ name = $ this -> request -> getQuery ( " var " );
return new Response ( " Welcome $ name ! " );
}
}Hexacore Verwenden Sie PHP auch für die Vorlagen. Der Controller verfügt über eine erkannte Methode, um die Ansicht aus PHP -Dateien zu rendern.
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Response Response ;
class UserController extends Controller
{
public function index (): Response
{
return $ this -> render ( " user/index.php " );
}
} Dieser Code rendert die Datei index.php direkt in der Vorlagendatei base.php . Sie können die Vorlagendatei in App/src/view/base/php ändern.
Als Entwickler müssen Sie nur den Pfad Ihrer Datei angeben (wie gezeigt user/index.php ), aber auch, wo Sie ihn in die Datei base.php einfügen sollen.
Zum Beispiel:
...
< main >
< ?php echo $block1; ? >
</ main >
...Sie können Hexacore verwenden, um Daten zu bestehen. Standardmäßig wird die MySQL -Datenbank verwendet.
Sie können den Datenbanknamen und den Zugriff in der Konfigurationsdatei App/config/database.json konfigurieren
{
"dbname" : " myHexacoreDb " ,
"host" : " db " ,
"port" : 3306 ,
"user" : " Athena " ,
"password" : " myDatabasePassword "
}Daten aus der Datenbank können im Controller abgerufen werden:
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Model Repository ModelRepository ;
use Hexacore Core Response ResponseInterface ;
use App Model User ;
class UserController extends Controller
{
public function index ( ModelRepository $ modelRepository ): ResponseInterface
{
// to get all users
$ allUsers = $ modelRepository -> setModel (User::class)-> findAll ();
// to get the user with the id 1
$ user = $ modelRepository -> findById ( 1 );
return $ this -> render ( " user/index.php " , [
" users " => $ allUsers ,
" user " => $ user
]);
}
} Die ModelRepository -Klasse gibt ein Modellobjekt zurück, in diesem Beispiel ein Benutzermodell.
Um alle Benutzerdaten zu erhalten, müssen Sie zunächst ein Modell erstellen. Das Modell muss die Daten beschreiben, die Sie mit privaten Eigenschaften speichern möchten. Das Modell ist eine Klasse, die ManageableModelInterface implementiert. Dies ermöglicht Hexacore über dieses Modell mit der Datenbank mit dem Datenbasis und verhandelt es einfach mit vorgefertigtem Objekt wie ModelManager .
Beispiel :
<?php
namespace App Model ;
use Hexacore Core Model ManageableModelInterface ;
class User implements ManageableModelInterface
{
private $ id ;
private $ name ;
public function getId () : ? int
{
return $ this -> id ;
}
public function setId ( int $ id ) : ManageableModelInterface
{
$ this -> id = $ id ;
return $ this ;
}
} Sie müssen eine entsprechende Tabelle in Ihrer MySQL -Datenbank mit denselben Feldern (hier id und name ) und dem User erstellen.
Wir haben früher gesehen, dass ModelRepository verwendet werden könnte, um Daten aus der Datenbank abzurufen. Um ein Modell zu erstellen und zu aktualisieren, können wir ModelManager verwenden.
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Model Manager ModelManager ;
use Hexacore Core Response ResponseInterface ;
use Hexacore Core Response Redirect RedirectionResponse ;
use Hexacore Helpers Url ;
use App Model User ;
class UserController extends Controller
{
public function create ( ModelManager $ modelManager , string $ name , Url $ url ): ResponseInterface
{
// create a new user with a personal name
$ user = new User ();
$ user -> setName ( $ name );
// actually insert the new user in the database
$ modelManager -> persist ( $ user );
// redirection to another page
return new RedirectionResponse ( $ url -> baseUrl ( " user " ));
}
} Mit ModelManager können Sie auch ein Modell löschen oder aktualisieren.
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Model Manager ModelManager ;
use Hexacore Core Response ResponseInterface ;
use App Model User ;
class UserController extends Controller
{
/**
* For a resource like : user/update/{id}/{name}
* Example of the query :
* http://www.yourwebsite.com/user/update/1/zeus
*/
public function update ( ModelManager $ modelManager , User $ user , string $ name ): ResponseInterface
{
// the $user value will be a User object with data from the user number id
// we change the user name
$ user -> setName ( $ name );
// we persist this change in the database
$ modelManager -> persist ( $ user );
return new Response ( " User updated " );
}
/**
* For a resource like : user/delete/{id}
* Example of the query :
* http://www.yourwebsite.com/user/delete/1
*/
public function delete ( ModelManager $ modelManager , User $ user ): ResponseInterface
{
// again $user will be a User Model corresponding to the user with
// the id, 1 in the example.
// delete a specific user in the database
$ modelManager -> delete ( $ user );
return new Response ( " User deleted " );
}
}Dieses Projekt wird zum Spaß entwickelt und ist möglicherweise nicht aktualisiert, aber ich sehe viele Verbesserungsräume:
Für die Zukunft sind weitere Tests in mehreren Umgebungen erforderlich, zum Beispiel auf dem NGINX -Webserver.
Ich bin mir auch nicht sicher, ob Auth und Firewall in Zukunft verwendet werden können.