이 골격 응용 프로그램을 사용하여 새로운 배아 프레임 워크 3 응용 프로그램 작업을 시작할 수 있습니다.
작곡가 사용 :
$ composer create-project davidecesarano/embryo [my-app-name]
배아는 DotenV PHP 라이브러리를 사용합니다. 새로운 배아 설치에서 응용 프로그램의 루트 디렉토리에는 .env.example 파일이 포함됩니다. Composer를 통해 배아를 설치하면이 파일의 이름이 .env 로 이름이 자동으로 변경됩니다.
| 예배 규칙서 | 설명 |
|---|---|
| 앱 | 응용 프로그램의 핵심 코드가 포함되어 있습니다. 이 디렉토리에는 Controllers , Exceptions , Helpers , Middleware , Models 및 Services 와 같은 다양한 추가 디렉토리가 포함되어 있습니다. |
| 부트 스트랩 | 앱 인스턴스화, 미들웨어, 서비스 및 설정과 같은 응용 프로그램을 부트 스트랩하는 파일이 포함되어 있습니다. |
| 공공의 | 모든 요청 ( index.php 파일) 및 assets 디렉토리의 진입 점이 포함되어 있습니다. |
| 경로 | 응용 프로그램의 모든 경로 정의가 포함되어 있습니다. 기본적으로 여러 경로 파일은 Embryo : app.php 및 api.php 에 포함됩니다. |
| 저장 | 로그 ( logs ), 컴파일 된 템플릿 파일 ( views ), 파일 기반 세션 ( sessions ), 캐시 파일 ( cache )이 포함되어 있습니다. |
| 번역 | 언어 파일이 포함되어 있습니다. |
| 보기 | 보기 파일이 포함되어 있습니다. |
bootstrap/app.php 에서 EmbryoApplication 클래스와 함께 인스턴스화됩니다. 인스턴스화 중에 배아는 종속성 ( bootstrap/services.php ), 중간 ( bootstrap/middleware.php ) 및 라우팅 파일 ( routes directory)에 대한 서비스를 등록합니다. 응용 프로그램 생성자는 응용 프로그램의 동작 ( bootstrap/settings.php )을 구성하는 선택적 설정 배열을 수락합니다.routes 에서 Direcotry는 응용 프로그램 인스턴스의 라우팅 방법을 사용하여 경로를 정의합니다. 이 인스턴스 메소드는 응용 프로그램의 라우터 객체에 경로를 등록합니다. 각 라우팅 메소드는 경로 인스턴스를 리턴하므로 즉시 경로 인스턴스의 메소드를 호출하여 미들웨어를 추가하거나 이름을 할당 할 수 있습니다.public/index.php 에서 응용 프로그램 인스턴스의 run() 메소드를 호출합니다. 이 방법은 다음 과정을 시작합니다.배아는 요청 및 응답 개체에 대한 PSR-7 인터페이스를 지원합니다.
배아 적용 전후에 코드를 실행하여 요청 및 응답 객체를 조작 할 수 있습니다. 이것을 미들웨어라고합니다. 미들웨어는 PSR-15 미들웨어 인터페이스를 구현합니다.
배아는 종속성 컨테이너를 사용하여 응용 프로그램 종속성을 준비, 관리 및 주입합니다. 배아는 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, Post, Put, Patch, Delete 및 옵션 요청 방법. options() 요청 메소드 get() 라우터 개체의 메소드 patch() delete() post() put() 모든 방법 또는 특정 경로 방법을 지원하기 위해 all() 및 map() 메소드를 사용할 수 있습니다.
전체 문서 : 배아 라우팅을 참조하십시오.
모든 배아 경로는 routes 디렉토리에있는 경로 파일에 정의되어 있습니다. 이 파일은 boostrap/app.php 파일의 응용 프로그램에 의해 자동으로로드됩니다. 새 ruote 파일을 생성하려면 lourses directory에 추가하고 import() methods의 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 ' )
]); 배아에서는 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! ' );
}
}서비스 제공 업체는 모든 배아 애플리케이션 부트 스트랩의 중심 장소입니다. 배아의 모든 핵심 서비스뿐만 아니라 자신의 응용 프로그램은 서비스 제공 업체를 통해 부트 스트랩됩니다.
서비스 제공 업체는 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 ' ;
});
}
}