您可以使用此骨架应用程序开始在新的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 ' ;
});
}
}