您可以使用此骨架應用程序開始在新的Embryo Framework 3應用程序上工作。
使用作曲家:
$ composer create-project davidecesarano/embryo [my-app-name]
胚胎利用Dotenv PHP庫。在新的胚胎安裝中,應用程序的根目錄將包含.env.example文件。當您通過作曲家安裝胚胎時,此文件將自動重命名為.env 。
| 目錄 | 描述 |
|---|---|
| 應用程式 | 包含您應用程序的核心代碼。該目錄包含各種其他目錄,例如Controllers , Exceptions , Helpers , Middleware , Models和Services 。 |
| 引導程序 | 包含引導您應用程序的文件,例如應用程序實例化,中間件,服務和設置。 |
| 民眾 | 包含所有請求( index.php文件)和assets目錄的入口點。 |
| 路線 | 包含用於應用程序的所有路由定義。默認情況下,embryo: app.php和api.php中包含了幾個路由文件。 |
| 貯存 | 包含您的日誌( logs ),編譯模板文件( views ),基於文件的會話( sessions ),緩存文件( cache )。 |
| 翻譯 | 包含您的語言文件。 |
| 視圖 | 包含視圖文件。 |
EmbryoApplication類的bootstrap/app.php中實例化。在實例化期間,胚胎註冊依賴項的服務( bootstrap/services.php ),middlewares( bootstrap/middleware.php )和路由文件(在routes目錄中)。應用程序構造函數接受配置應用程序行為的可選設置數組( bootstrap/settings.php )。routes中,直接轉基因使用應用程序實例的路由方法定義路由。這些實例方法用應用程序的路由器對象註冊路由。每個路由方法返迴路由實例,因此您可以立即調用路由實例的方法來添加中間件或分配名稱。public/index.php中調用應用程序實例的run()方法。此方法啟動以下過程:胚胎支持其請求和響應對象的PSR-7接口。
您可以在胚胎應用程序之前和之後運行代碼,以操縱您所看到的請求和響應對象。這稱為中間件。中間件實現PSR-15中間件接口。
Embryo使用依賴容器來準備,管理和注入應用程序依賴。胚胎支持實現PSR-11的容器。
您可以使用應用程序實例的路由方法定義應用程序路由。每種方法都接受兩個參數:
class@method字符串或['class', 'method']數組) 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 );
}胚胎路由支持GET,發布,PUT,修補,刪除和選項請求方法。每個請求方法都對應路由器對象的方法: get() , post() , put() , patch() , delete()和options() 。您可以使用all()和map()方法來支持所有方法或特定的路由方法。
請參閱完整文檔:胚胎路由。
所有胚胎路由都在路由文件中定義,該路由位於routes目錄中。這些文件會由您的應用程序在boostrap/app.php文件中自動加載。如果要創建新的Reote文件,請將其添加到路由目錄中,然後在boostrap/app.php文件中的應用程序實例的import()方法中註冊它:
$ 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 ' )
]);在Embryo中,您可以在appMiddleware目錄中創建PSR-15中間件。您可以將中間件添加到應用程序,特定路由或路由組。
如果要為每個HTTP請求註冊中間件,請在bootstrapmiddleware.php中添加應用程序中間件。 addMiddleware()方法接受PsrHttpServerMiddlewareInterface的字符串,數組或實例。
$ app -> addMiddleware ( App Middleware MyCustomMiddleware::class);您可以使用middleware()方法在路線上分配一個或多個中間件。 middleware()方法接受PsrHttpServerMiddlewareInterface的字符串,數組或實例。
$ app -> get ( ' /users ' , function ( ServerRequest $ request , Response $ response ) {
//...
})-> middleware ( ' AppMiddlewareTestMiddleware1::class ' , ' AppMiddlewareTestMiddleware2::class ' );除路線外,您還可以為組中的一個或多個中間件分配一個或多個中間件。 middleware()方法接受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);
});您不得希望使用“控制器”類將所有請求處理邏輯定義為路由文件中的關閉。讓我們看一個基本控制器的示例。請注意,控制器擴展了胚胎包含的基本控制器類:
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 );
}
}您可以定義通往此控制器方法的路線:
use App Controllers UserController ;
$ app -> get ( ' /user/{id} ' , [UserController::class, ' show ' ]);控制器必須擴展基類。但是,您將無法訪問諸如get() , request()和response()方法之類的功能。
您可以在其構造函數中鍵入任何依賴項。聲明的依賴項將自動解決並註入控制器實例:
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 ;
}
}除了構造函數注入外,您還可以對控制器的方法鍵入鑑定依賴性:
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message ServerRequest ;
class UserController extends Controller
{
/**
* @param ServerRequest $request
*/
public function store ( ServerRequest $ request )
{
//...
}
}此外,您還可以使用基本控制器類的get()方法:
namespace App Controllers ;
use Embryo Controller ;
use Path To Service ;
class UserController extends Controller
{
public function show ()
{
$ service = $ this -> get (Service::class);
//...
}
}基本控制器類還可以訪問PSR-7 request()和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! ' );
}
}另外,您可以訪問request()和response()幫助者:
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! ' );
}
}服務提供商是所有胚胎應用程序自舉的中心地位。您自己的應用程序以及Embryo的所有核心服務都是通過服務提供商引導的。
服務提供商時代位於app/Services目錄中。所有服務提供商都擴展了EmbryoContainerServiceProvider類,並包含register方法。在寄存器方法中,您應僅將事物綁定到服務容器中。
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 ' ;
});
}
}