Múltiples Aplicaciones

A veces un proyecto puede dividirse en varios subproyectos, por ejemplo, una tienda puede dividirse en el proyecto principal de la tienda, la API de la tienda y el backend de administración de la tienda, donde todos utilizan la misma configuración de base de datos.

Webman te permite planificar el directorio de la aplicación de esta manera:

app
├── shop
│   ├── controller
│   ├── model
│   └── view
├── api
│   ├── controller
│   └── model
└── admin
    ├── controller
    ├── model
    └── view

Cuando accedes a la dirección http://127.0.0.1:8787/shop/{controlador}/{método}, se accede al controlador y método en app/shop/controller.

Cuando accedes a la dirección http://127.0.0.1:8787/api/{controlador}/{método}, se accede al controlador y método en app/api/controller.

Cuando accedes a la dirección http://127.0.0.1:8787/admin/{controlador}/{método}, se accede al controlador y método en app/admin/controller.

En Webman, incluso puedes planificar el directorio de la aplicación de esta manera.

app
├── controller
├── model
├── view
│
├── api
│   ├── controller
│   └── model
└── admin
    ├── controller
    ├── model
    └── view

De esta manera, cuando accedes a la dirección http://127.0.0.1:8787/{controlador}/{método}, se accede al controlador y método en app/controller. Cuando la ruta empieza con api o admin, se accede al controlador y método en el directorio correspondiente.

Al manejar múltiples aplicaciones, el espacio de nombres de las clases debe cumplir con psr4, por ejemplo, el archivo app/api/controller/FooController.php se vería algo así:

<?php
namespace app\api\controller;

use support\Request;

class FooController
{

}

Configuración de Middleware para Múltiples Aplicaciones

A veces, es posible que desees configurar diferentes middlewares para diferentes aplicaciones. Por ejemplo, la aplicación api puede necesitar un middleware de control de acceso, y admin puede necesitar un middleware que verifique la sesión de administrador, por lo que la configuración de config/middleware.php podría parecerse a lo siguiente:

return [
    // Middleware global
    '' => [
        support\middleware\AuthCheck::class,
    ],
    // Middleware para la aplicación api
    'api' => [
         support\middleware\AccessControl::class,
     ],
    // Middleware para la aplicación admin
    'admin' => [
         support\middleware\AdminAuthCheck::class,
         support\middleware\SomeOtherClass::class,
    ],
];

Los middlewares mencionados anteriormente pueden no existir, aquí se proporciona únicamente como ejemplo sobre cómo configurar middlewares por aplicación.

El orden de ejecución del middleware es middleware global -> middleware de aplicación.

Consulta la sección de middleware para más detalles sobre el desarrollo de middleware.

Configuración de Manejo de Excepciones para Múltiples Aplicaciones

De igual manera, es posible que desees configurar diferentes clases de manejo de excepciones para diferentes aplicaciones. Por ejemplo, si ocurre una excepción en la aplicación shop, es posible que desees proporcionar una página de aviso amigable; si ocurre una excepción en la aplicación api, es posible que desees devolver un string JSON en lugar de una página. La configuración del archivo para manejar excepciones de diferentes aplicaciones, config/exception.php, se vería algo así:

return [
    'shop' => support\exception\Handler::class,
    'api' => support\exception\ApiHandler::class,
];

A diferencia de los middlewares, cada aplicación solo puede configurar una clase de manejo de excepciones.

Las clases de manejo de excepciones mencionadas anteriormente pueden no existir, aquí se proporciona únicamente como ejemplo sobre cómo configurar el manejo de excepciones por aplicación.

Consulta la sección de excepciones para más detalles sobre el desarrollo de manejo de excepciones.