Puede usar esta aplicación Skeleton para comenzar a trabajar en una nueva aplicación Embryo Framework 3.
Usando el compositor:
$ composer create-project davidecesarano/embryo [my-app-name]
El embrión utiliza la biblioteca Dotenv PHP. En una nueva instalación de embriones, el directorio raíz de su aplicación contendrá un archivo .env.example . Cuando instala embrión a través del compositor, este archivo se cambiará el nombre automáticamente a .env .
| Directorio | Descripción |
|---|---|
| aplicación | Contiene el código central de su aplicación. Este directorio contiene una variedad de directorios adicionales, como Controllers , Exceptions , Helpers , Middleware , Models y Services . |
| oreja | Contiene los archivos que inician su aplicación, como instanciación de la aplicación, middleware, servicios y configuraciones. |
| público | Contiene el punto de entrada para todas las solicitudes (archivo index.php ) y el directorio assets . |
| rutas | Contiene todas las definiciones de ruta para su aplicación. De forma predeterminada, se incluyen varios archivos de ruta con Embryo: app.php y api.php . |
| almacenamiento | Contiene sus registros ( logs ), archivo de plantillas compiladas ( views ), sesiones basadas en archivos ( sessions ), archivos Caches ( cache ). |
| traducciones | Contiene sus archivos de idioma. |
| vistas | Contiene los archivos de vistas. |
bootstrap/app.php con la clase EmbryoApplication . Durante la instancia, el embrión registra los servicios para las dependencias ( bootstrap/services.php ), MiddleWares ( bootstrap/middleware.php ) y los archivos de rutas (en el directorio routes ). El constructor de la aplicación acepta una matriz de configuración opcional que configura el comportamiento de la aplicación ( bootstrap/settings.php ).routes direcotry, defina las rutas utilizando los métodos de enrutamiento de la instancia de la aplicación. Estos métodos de instancia registran una ruta con el objeto de enrutador de la aplicación. Cada método de enrutamiento devuelve la instancia de ruta, por lo que puede invocar inmediatamente los métodos de la instancia de ruta para agregar middleware o asignar un nombre.public/index.php invoca el método run() de instancia de la aplicación. Este método inicia el siguiente proceso:El embrión admite interfaces PSR-7 para sus objetos de solicitud y respuesta.
Puede ejecutar el código antes y después de su aplicación de embriones para manipular los objetos de solicitud y respuesta como mejor le parezca. Esto se llama middleware. Un middleware implementa la interfaz Middleware PSR-15.
El embrión utiliza un contenedor de dependencia para preparar, administrar e inyectar dependencias de aplicaciones. El embrión admite contenedores que implementan PSR-11.
Puede definir rutas de aplicación utilizando los métodos de enrutamiento de la instancia de la aplicación. Cada método acepta dos argumentos:
class@method o una matriz ['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 );
} El enrutamiento de embriones es compatible con los métodos de solicitud de POST, PUT, Patch, Eliminar y Opciones. Cada método de solicitud corresponde a un método del objeto enrutador: get() , post() , put() , patch() , delete() y options() . Puede usar all() y map() para soportar todos los métodos o métodos de ruta específicos.
Ver documentación completa: enrutamiento de embriones.
Todas las rutas de embriones se definen en los archivos de su ruta, que se encuentran en el directorio routes . Estos archivos son cargados automáticamente por su aplicación en el archivo boostrap/app.php . Si desea crear un nuevo archivo Ruote, agrégalo en el directorio de rutas y registérelo en el método import() de la instancia de la aplicación en el archivo 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 ' )
]); En el embrión, puede crear un middleware PSR-15 en el directorio appMiddleware . Puede agregar middleware a la aplicación, a una ruta específica o al grupo de ruta.
Si desea registrar el middleware para cada solicitud HTTP, agregue el middleware de la aplicación en bootstrapmiddleware.php . El método addMiddleware() acepta una cadena, una matriz o una instancia de PsrHttpServerMiddlewareInterface .
$ app -> addMiddleware ( App Middleware MyCustomMiddleware::class); Puede usar el método middleware() para asignar uno o más middleware en la ruta. El método middleware() acepta una cadena, una matriz o una instancia de PsrHttpServerMiddlewareInterface .
$ app -> get ( ' /users ' , function ( ServerRequest $ request , Response $ response ) {
//...
})-> middleware ( ' AppMiddlewareTestMiddleware1::class ' , ' AppMiddlewareTestMiddleware2::class ' ); Además de las rutas, puede asignar uno o más middleware a un grupo y a rutas individuales dentro del grupo. El método middleware() acepta una cadena, una matriz o una instancia de 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);
});En lugar de definir todas sus solicitudes de manejo de la lógica como cierres en los archivos de su ruta, es posible que desee organizar este comportamiento utilizando clases de "controlador". Echemos un vistazo a un ejemplo de un controlador básico. Tenga en cuenta que el controlador extiende la clase de controlador base incluida con el embrión:
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 );
}
}Puede definir una ruta a este método de controlador como así:
use App Controllers UserController ;
$ app -> get ( ' /user/{id} ' , [UserController::class, ' show ' ]); Se requiere controladores para extender una clase base. Sin embargo, no tendrá acceso a características como los métodos get() , request() y response() .
Puede escribir cualquier dependencia que su controlador pueda necesitar en su constructor. Las dependencias declaradas se resolverán e inyectarán automáticamente en la instancia del controlador:
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 ;
}
}Además de la inyección de constructor, también puede escribir dependencias de sugerencia en los métodos de su controlador:
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message ServerRequest ;
class UserController extends Controller
{
/**
* @param ServerRequest $request
*/
public function store ( ServerRequest $ request )
{
//...
}
} Además, también puede usar el método get() de la clase de controlador base:
namespace App Controllers ;
use Embryo Controller ;
use Path To Service ;
class UserController extends Controller
{
public function show ()
{
$ service = $ this -> get (Service::class);
//...
}
} La clase de controlador base también tiene acceso a métodos PSR-7 request() y 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! ' );
}
} Alternativamente, puede acceder a los ayudantes request() y 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! ' );
}
}Los proveedores de servicios son el lugar central de todos los bootstrapping de aplicaciones de embriones. Su propia aplicación, así como todos los servicios principales de Embryo, están arrancados a través de proveedores de servicios.
La era de los proveedores de servicios ubicados en el directorio app/Services . Todos los proveedores de servicios extienden la clase EmbryoContainerServiceProvider y contiene un método register . Dentro del método de registro, solo debe vincular cosas al contenedor de servicio.
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 ' ;
});
}
}