Sie können diese Skeleton -Anwendung verwenden, um an einer neuen Embryo Framework 3 -Anwendung zu arbeiten.
Verwenden von Komponisten:
$ composer create-project davidecesarano/embryo [my-app-name]
Embryo verwendet die DOTENV -PHP -Bibliothek. In einer frischen Embryo -Installation enthält das Stammverzeichnis Ihrer Anwendung eine .env.example -Datei. Wenn Sie Embryo über einen Komponisten installieren, wird diese Datei automatisch in .env umbenannt.
| Verzeichnis | Beschreibung |
|---|---|
| App | Enthält den Kerncode Ihrer Anwendung. Dieses Verzeichnis enthält eine Vielzahl von zusätzlichen Verzeichnissen wie Controllers , Exceptions , Helpers , Middleware , Models und Services . |
| Bootstrap | Enthält die Dateien, die Ihre Anwendung wie App -Instantiation, Middleware, Dienste und Einstellungen starten. |
| öffentlich | Enthält den Einstiegspunkt für alle Anforderungen ( index.php -Datei) und das Verzeichnis assets . |
| Routen | Enthält alle Routendefinitionen für Ihre Anwendung. Standardmäßig sind mehrere Routendateien in Embryo enthalten: app.php und api.php . |
| Lagerung | Enthält Ihre Protokolle ( logs ), kompilierte Vorlagendatei ( views ), dateibasierte Sitzungen ( sessions ), Caches -Dateien ( cache ). |
| Übersetzungen | Enthält Ihre Sprachdateien. |
| Ansichten | Enthält die Ansichtsdateien. |
bootstrap/app.php mit EmbryoApplication instanziiert. Während der Instanziierung registriert Embryo -Dienste für die Abhängigkeiten ( bootstrap/services.php ), Middlewares ( bootstrap/middleware.php ) und Routes -Dateien (im routes -Verzeichnis). Der Anwendungskonstruktor akzeptiert ein optionales Einstellungsarray, das das Verhalten der Anwendung konfiguriert ( bootstrap/settings.php ).routes Direcotry Routen mithilfe der Routing -Methoden der Anwendungsinstanz. Diese Instanzmethoden registrieren eine Route mit dem Router -Objekt der Anwendung. Jede Routing -Methode gibt die Routeninstanz zurück, sodass Sie die Methoden der Routeninstanz sofort aufrufen können, um Middleware hinzuzufügen oder einen Namen zuzuweisen.public/index.php rufen Sie die run() -Methode der Anwendungsinstanz auf. Diese Methode startet den folgenden Prozess:Embryo unterstützt PSR-7-Schnittstellen für seine Anforderungs- und Antwortobjekte.
Sie können Code vor und nach Ihrer Embryo -Anwendung ausführen, um die Anforderungs- und Antwortobjekte nach Ansicht zu manipulieren. Dies nennt man Middleware. Eine Middleware implementiert die PSR-15 Middleware-Schnittstelle.
Embryo verwendet einen Abhängigkeitsbehälter, um Anwendungsabhängigkeiten vorzubereiten, zu verwalten und zu injizieren. Embryo unterstützt Container, die PSR-11 implementieren.
Sie können Anwendungsrouten mithilfe der Routing -Methoden der Anwendungsinstanz definieren. Jede Methode akzeptiert zwei Argumente:
class@method -Zeichenfolge oder eine ['class', 'method'] Array) use Embryo Http Message { Response , ServerRequest };
// GET Route
$ app ->get( ' /blog/{id} ' , function ( ServerRequest $ request , Response $ response , int $ id ) {
return $ response -> write ( ' This is post with id ' . $ id );
} Embryo Routing unterstützt die Methoden zur Anforderung von Anforderungsmethoden erhalten, postieren, picken, entspannen, löschen und Optionen anfordern. Jede Anforderungsmethode entspricht einer Methode des Router -Objekts: get() , post() , put() , patch() , delete() und options() . Sie können all() und map() verwenden, um alle Methoden oder spezifischen Routenmethoden zu unterstützen.
Siehe vollständige Dokumentation: Embryo -Routing.
Alle Embryo -Routen sind in Ihren Routendateien definiert, die sich im routes befinden. Diese Dateien werden automatisch von Ihrer Anwendung in der Datei boostrap/app.php geladen. Wenn Sie eine neue Ruote -Datei erstellen möchten, fügen Sie sie in das Routes -Verzeichnis hinzu und registrieren Sie diese in der Anwendungsinstanz import() in der Datei boostrap/app.php :
$ app -> import ([
root_path ( ' bootstrap/services.php ' ),
root_path ( ' bootstrap/middleware.php ' ),
root_path ( ' routes/api.php ' ),
root_path ( ' routes/app.php ' ),
root_path ( ' routes/my_route_file.php ' )
]); Im Embryo können Sie im appMiddleware Verzeichnis eine PSR-15-Middleware erstellen. Sie können Middleware zur Anwendung, zur bestimmten Route oder zur Route -Gruppe hinzufügen.
Wenn Sie Middleware für jede HTTP -Anforderung registrieren möchten, fügen Sie die Anwendung Middleware in bootstrapmiddleware.php hinzu. Die Methode addMiddleware() akzeptiert eine Zeichenfolge, ein Array oder eine Instanz von PsrHttpServerMiddlewareInterface .
$ app -> addMiddleware ( App Middleware MyCustomMiddleware::class); Sie können die middleware() -Methode verwenden, um eine oder mehrere Middleware auf der Route zuzuweisen. Die middleware() -Methode akzeptiert eine Zeichenfolge, ein Array oder eine Instanz von PsrHttpServerMiddlewareInterface .
$ app -> get ( ' /users ' , function ( ServerRequest $ request , Response $ response ) {
//...
})-> middleware ( ' AppMiddlewareTestMiddleware1::class ' , ' AppMiddlewareTestMiddleware2::class ' ); Zusätzlich zu den Routen können Sie einer Gruppe und einzelnen Routen innerhalb der Gruppe eine oder mehrere Middleware zuweisen. Die middleware() -Methode akzeptiert eine Zeichenfolge, ein Array oder eine Instanz von PsrHttpServerMiddlewareInterface .
$ app -> prefix ( ' /api ' )-> middleware ( App Middleware GroupMiddlewareTest::class)-> group ( function ( $ app ) {
$ app -> get ( ' /user/{id} ' , function ( ServerRequest $ request , Response $ response , int $ id ) {
//...
})-> middleware ( App Middleware RouteMiddlewareTest::class);
});Anstatt alle Ihre Anforderungslogik als Schließungen in Ihren Routendateien zu definieren, möchten Sie dieses Verhalten möglicherweise mit "Controller" -Kassen organisieren. Schauen wir uns ein Beispiel eines Basic -Controllers an. Beachten Sie, dass der Controller die im Embryo enthaltene Basis -Controller -Klasse erweitert:
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message Response ;
class UserController extends Controller
{
/**
* @param int $id
* @return Response
*/
public function show ( int $ id ): Response
{
return $ this -> response ()-> write ( $ id );
}
}Sie können einen Weg zu dieser Controller -Methode wie SO definieren:
use App Controllers UserController ;
$ app -> get ( ' /user/{id} ' , [UserController::class, ' show ' ]); Controller müssen eine Basisklasse erweitern. Sie haben jedoch keinen Zugriff auf Funktionen wie get() , request() und response() .
Sie können alle Abhängigkeiten, die Ihr Controller in seinem Konstruktor benötigt, eingeben. Die deklarierten Abhängigkeiten werden automatisch aufgelöst und in die Controller -Instanz injiziert:
namespace App Controllers ;
use Embryo Controller ;
use Path To Service ;
class UserController extends Controller
{
/**
* @var Service $service
*/
private $ service ;
/**
* @param Service $service
*/
public function __construct ( Service $ service )
{
$ this -> service = $ service ;
}
}Zusätzlich zur Konstruktorinjektion können Sie auch Abhängigkeiten von den Methoden Ihres Controller eintypisieren:
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message ServerRequest ;
class UserController extends Controller
{
/**
* @param ServerRequest $request
*/
public function store ( ServerRequest $ request )
{
//...
}
} Darüber hinaus können Sie auch die get() -Methode der Basis -Controller -Klasse verwenden:
namespace App Controllers ;
use Embryo Controller ;
use Path To Service ;
class UserController extends Controller
{
public function show ()
{
$ service = $ this -> get (Service::class);
//...
}
} Die Basiscontroller-Klasse hat auch Zugriff auf die Methoden PSR-7 request() und response() :
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message Response ;
class UserController extends Controller
{
/**
* @return Response
*/
public function store (): Response
{
$ params = $ this -> request ()-> getParsedBody ();
//...
return $ this -> response ()-> write ( ' Hello! ' );
}
} Alternativ können Sie zugreifen, um auf request() und response() zugreifen zu können:
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message Response ;
class UserController extends Controller
{
/**
* @return Response
*/
public function store (): Response
{
$ params = request ()-> getParsedBody ();
return response ()-> write ( ' Hello! ' );
}
}Dienstanbieter sind der zentrale Ort aller Embryo -Anwendungsstiefel. Ihre eigene Bewerbung sowie alle Kerndienste von Embryo werden über Dienstleister Bootstrapern.
Die Dienstanbieter -ERA im app/Services -Verzeichnis. Alle Dienstleister erweitern die EmbryoContainerServiceProvider -Klasse und enthält eine register . In der Registermethode sollten Sie Dinge nur in den Service -Container einbinden.
namespace App Services ;
use Embryo Container ServiceProvider ;
class TestService extends ServiceProvider
{
/**
* Registers service provider.
*
* @return void
*/
public function register ()
{
$ this -> container -> set ( ' test ' , function ( $ container ){
return ' Hello from my test service ' ;
});
}
}