Вы можете использовать это приложение скелета, чтобы начать работу над новым приложением Embry Framework 3.
Использование композитора:
$ composer create-project davidecesarano/embryo [my-app-name]
Эмбрион использует библиотеку PHP DOTENV. В свежем установке эмбриона корневой каталог вашего приложения будет содержать файл .env.example . Когда вы устанавливаете эмбрион через композитор, этот файл автоматически будет переименован в .env .
| Каталог | Описание |
|---|---|
| приложение | Содержит основной код вашего приложения. Этот каталог содержит множество дополнительных каталогов, таких как Controllers , Exceptions , Helpers , Middleware , Models и Services . |
| начальная загрузка | Содержит файлы, которые загружают ваше приложение, такие как приложения, промежуточное программное обеспечение, услуги и настройки. |
| публичный | Содержит точку входа для всех запросов (файл index.php ) и каталог assets . |
| маршруты | Содержит все определения маршрута для вашего приложения. По умолчанию несколько файлов маршрута включены в эмбрион: app.php и api.php . |
| хранилище | Содержит ваши журналы ( logs ), скомпилированный файл шаблонов ( views ), сеансы на основе файлов ( sessions ), Файлы CACHES ( cache ). |
| переводы | Содержит ваши языковые файлы. |
| виды | Содержит файлы представлений. |
bootstrap/app.php с классом EmbryoApplication . Во время экземпляра эмбрион регистрирует услуги для зависимостей ( bootstrap/services.php ), Middlewares ( bootstrap/middleware.php ) и маршруты файлов (в каталоге routes ). Конструктор приложения принимает необязательный массив настроек, который настраивает поведение приложения ( 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 и Методы запросов параметров. Каждый метод запроса соответствует методу объекта маршрутизатора: get() , post() , put() , patch() , delete() и options() . Вы можете использовать all() и map() для поддержки всех методов или конкретных методов маршрута.
Смотрите полную документацию: маршрутизация эмбрионов.
Все маршруты эмбрионов определяются в файлах вашего маршрута, которые расположены в каталоге routes . Эти файлы автоматически загружаются вашим приложением в файле boostrap/app.php . Если вы хотите создать новый файл Ruote, добавьте его в каталог маршрутов и зарегистрируйте его в методе import() экземпляра приложения в файле 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 ' )
]); В эмбрионе вы можете создать промежуточное программное обеспечение PSR-15 в каталоге appMiddleware . Вы можете добавить промежуточное программное обеспечение к применению, определенному маршруту или в группу маршрутов.
Если вы хотите зарегистрировать промежуточное программное обеспечение для каждого 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 );
}
}Вы можете определить маршрут к этому методу контроллера, как SO:
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 ' ;
});
}
}