Múltiplos Aplicativos
Às vezes, um projeto pode ser dividido em vários subprojetos, como por exemplo, uma loja pode ser dividida em um projeto principal da loja, uma interface de API da loja e um painel de administração da loja, todos eles usando a mesma configuração de banco de dados.
O webman permite planejar o diretório do aplicativo da seguinte forma:
app
├── shop
│ ├── controller
│ ├── model
│ └── view
├── api
│ ├── controller
│ └── model
└── admin
├── controller
├── model
└── view
Quando você acessa o endereço http://127.0.0.1:8787/shop/{controller}/{action}
, você está acessando o controlador e a ação no diretório app/shop/controller
.
Quando você acessa o endereço http://127.0.0.1:8787/api/{controller}/{action}
, você está acessando o controlador e a ação no diretório app/api/controller
.
Quando você acessa o endereço http://127.0.0.1:8787/admin/{controller}/{action}
, você está acessando o controlador e a ação no diretório app/admin/controller
.
No webman, você até pode planejar o diretório do aplicativo da seguinte forma.
app
├── controller
├── model
├── view
│
├── api
│ ├── controller
│ └── model
└── admin
├── controller
├── model
└── view
Assim, quando você acessa o endereço http://127.0.0.1:8787/{controller}/{action}
, você está acessando o controlador e a ação no diretório app/controller
. Quando o caminho começa com api ou admin, você está acessando o controlador e a ação nos diretórios correspondentes.
Para aplicativos múltiplos, os namespaces das classes devem seguir o PSR-4
. Por exemplo, o arquivo app/api/controller/FooController.php
seria semelhante ao seguinte:
<?php
namespace app\api\controller;
use support\Request;
class FooController
{
}
Configuração de Middleware para Múltiplos Aplicativos
Às vezes, você pode querer configurar middleware diferentes para aplicativos diferentes, por exemplo, o aplicativo api
pode precisar de um middleware de controle de acesso cruzado, e admin
pode precisar de um middleware para verificar o login do administrador. Nesse caso, a configuração do arquivo config/midlleware.php
pode se parecer com o exemplo a seguir:
return [
// Middleware global
'' => [
support\middleware\AuthCheck::class,
],
// Middleware do aplicativo api
'api' => [
support\middleware\AccessControl::class,
],
// Middleware do aplicativo admin
'admin' => [
support\middleware\AdminAuthCheck::class,
support\middleware\SomeOtherClass::class,
],
];
Os middlewares mencionados acima podem não existir, este é apenas um exemplo de como configurar middleware para aplicativos diferentes.
A ordem de execução do middleware é middleware global
-> middleware do aplicativo
.
Para desenvolvimento de middlewares, consulte o capítulo de middlewares.
Configuração de Tratamento de Exceção para Múltiplos Aplicativos
Da mesma forma, você pode querer configurar classes de tratamento de exceção diferentes para aplicativos diferentes, por exemplo, quando ocorrer uma exceção no aplicativo shop
, talvez você queira fornecer uma página amigável de aviso; quando ocorrer uma exceção no aplicativo api
, talvez você queira retornar não uma página, mas uma string JSON. A configuração do arquivo config/exception.php
para configurar classes de tratamento de exceção diferentes para diferentes aplicativos pode se parecer com o exemplo a seguir:
return [
'shop' => support\exception\Handler::class,
'api' => support\exception\ApiHandler::class,
];
Ao contrário dos middlewares, cada aplicativo pode configurar apenas uma classe de tratamento de exceção.
As classes de tratamento de exceção mencionadas acima podem não existir, este é apenas um exemplo de como configurar o tratamento de exceção para diferentes aplicativos.
Para o desenvolvimento de tratamento de exceção, consulte o capítulo de tratamento de exceções.