Múltiplas Aplicações

Às vezes, um projeto pode ser dividido em vários subprojetos. Por exemplo, uma loja pode ser dividida em três subprojetos: o projeto principal da loja, a interface API da loja e o painel de gerenciamento da loja, todos utilizando a mesma configuração de banco de dados.

O Webman permite que você planeje o diretório app da seguinte forma:

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

Quando você acessar o endereço http://127.0.0.1:8787/shop/{controlador}/{método}, estará acessando o controlador e método sob app/shop/controller.

Quando você acessar o endereço http://127.0.0.1:8787/api/{controlador}/{método}, estará acessando o controlador e método sob app/api/controller.

Quando você acessar o endereço http://127.0.0.1:8787/admin/{controlador}/{método}, estará acessando o controlador e método sob app/admin/controller.

No Webman, você pode até mesmo planejar o diretório app dessa forma.

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

Assim, quando o endereço acessado for http://127.0.0.1:8787/{controlador}/{método}, estará acessando o controlador e método sob app/controller. Quando o caminho começar com api ou admin, estará acessando os controladores e métodos correspondentes nesses diretórios.

Ao usar múltiplas aplicações, o namespace das classes deve seguir psr4, por exemplo, o arquivo app/api/controller/FooController.php seria algo como:

<?php
namespace app\api\controller;

use support\Request;

class FooController
{

}

Configuração de Middleware para Múltiplas Aplicações

Às vezes, você pode querer configurar diferentes middlewares para diferentes aplicações. Por exemplo, a aplicação api pode precisar de um middleware de controle de acesso, enquanto a admin precisa de um middleware que verifica o login do administrador. Assim, a configuração em config/middleware.php pode ser semelhante ao seguinte:

return [
    // Middleware global
    '' => [
        support\middleware\AuthCheck::class,
    ],
    // Middleware da aplicação api
    'api' => [
         support\middleware\AccessControl::class,
     ],
    // Middleware da aplicação admin
    'admin' => [
         support\middleware\AdminAuthCheck::class,
         support\middleware\SomeOtherClass::class,
    ],
];

Os middlewares acima podem não existir; aqui são apenas exemplos demonstrando como configurar middlewares por aplicação.

A ordem de execução dos middlewares é Middleware global -> Middleware da aplicação.

Para referência sobre desenvolvimento de middleware, consulte a seção de middleware.

Configuração de Tratamento de Exceções para Múltiplas Aplicações

Da mesma forma, você pode querer configurar diferentes classes de tratamento de exceções para diferentes aplicações. Por exemplo, se ocorrer uma exceção na aplicação shop, você pode querer fornecer uma página amigável; se ocorrer uma exceção na aplicação api, você pode querer retornar uma string json em vez de uma página. O arquivo de configuração para tratar exceções para diferentes aplicações em config/exception.php seria semelhante ao seguinte:

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

Ao contrário dos middlewares, cada aplicação só pode configurar uma classe de tratamento de exceções.

As classes de tratamento de exceções acima podem não existir; aqui são apenas exemplos demonstrando como configurar o tratamento de exceções por aplicação.

Para referência sobre desenvolvimento de tratamento de exceções, consulte a seção de tratamento de exceções.