Framework PHP

Simplicidade e Consistência

Um framework centrado em entidades. Declare a estrutura do domínio uma vez e o Nyoze resolve rotas, validação e persistência.

Consistência do início ao fim.

UserEntity.php
class UserEntity extends EntityDefinition
{
    public function define(Entity $entity): void
    {
        $entity
            ->fields(
                Field::string('name')->required(),
                Field::email('email')->unique(),
                Field::password('password')->hidden(),
            )
            ->can('profile', ProfileAction::class)
            ->invariant(EmailRequired::class);
    }
}

Consistência

Modelo centrado em entidades. Um padrão. Todo projeto.

01

Entidade como núcleo

Campos, relações e restrições declarados em um lugar. O sistema se organiza a partir dessa definição.

02

Padronização estrutural

Entidades definem estrutura, actions definem comportamento, repositories cuidam dos dados. Sem variação.

03

Previsibilidade

Qualquer desenvolvedor localiza qualquer parte do código sem orientação. O padrão comunica por si.

Simplicidade

Menos conceitos, menos arquivos, menos decisões.

Complexidade reduzida

Sem rotas manuais, sem service providers, sem configs dispersos. A entidade declara, o framework resolve.

Leitura clara

Uma entidade se lê como uma especificação. Campos, actions e regras visíveis em um único arquivo.

Custo cognitivo menor

O desenvolvedor foca no domínio, não na infraestrutura do framework.

Como funciona

A entidade é o núcleo. Tudo parte dela.

1

Defina a entidade

Campos, tipos e restrições com API fluente.

ProjectEntity.php
$entity->fields(
    Field::ref('id_user', 'users'),
    Field::string('title')->required(),
    Field::string('status')->default('draft'),
);
2

Conecte o comportamento

Cada ->can() vira um endpoint HTTP.

$entity
    ->can('create', CreateAction::class)->post()
    ->can('list', ListAction::class)->get();
3

Isole a lógica

Uma action, um ActionContext, um Result.

CreateAction.php
class CreateAction
{
    public function __invoke(ActionContext $ctx): Result
    {
        $project = $ctx->repo()->save('projects', [
            'title'   => $ctx->input('title'),
            'id_user' => $ctx->userId(),
        ]);

        return Result::created($project);
    }
}
4

Execute

Kernel, repositório, entidades. Pronto.

index.php
$kernel = Kernel::load(function (App $app) {
    $app->useRepository(
        new PdoRepository(new PDO('sqlite:app.db'))
    );
    $app->load([UserEntity::class]);
});

$kernel->app()->run();

Database & Migrations

Providers plugáveis, schema automático e CLI integrada.

Providers plugáveis

MySQL, SQLite ou seu próprio provider. A geração de SQL é desacoplada — troque de banco sem alterar entidades.

Schema automático

O Nyoze lê suas entidades e gera migrations SQL automaticamente. Sem escrever DDL manual.

IDs configuráveis

Snowflake, AutoIncrement, UUID ou ULID. Escolha a estratégia global ou por entidade.

CLI integrada

Gere migrations, execute, reverta e inspecione o schema direto do terminal.

Configuração fluente

Configure o banco com uma única chamada. O provider, a conexão e a estratégia de ID ficam centralizados.

index.php
$app->database()->mysql([
    'host'     => '127.0.0.1',
    'database' => 'myapp',
    'user'     => 'root',
    'pass'     => 'secret',
]);

CLI

Gere, execute e gerencie migrations sem sair do terminal.

terminal
# make:migration
$ php nyoze make:migration

# migrate
$ php nyoze migrate

# migrate:rollback
$ php nyoze migrate:rollback

# schema:dump
$ php nyoze schema:dump

Benefícios concretos

Manutenção facilitada

Estrutura previsível. Qualquer desenvolvedor navega o projeto sem curva adicional.

Escalabilidade controlada

Adicionar entidades segue sempre o mesmo processo. O projeto cresce sem dívida técnica.

Consistência temporal

Do primeiro endpoint ao centésimo, o padrão é o mesmo.

Persistência desacoplada

Troque de banco sem alterar a lógica de negócio.

Sem lock-in

Sem ORM proprietário, sem globals. Código de domínio portável.

HTTP e CLI

Mesmas entidades, mesmas actions. Dois modos de execução.

Projeto independente, mantido com tempo pessoal. Se o Nyoze fizer sentido no seu fluxo, um café ajuda a manter tudo em movimento.

Oferecer um café

Consistência do início ao fim.


$ composer require pollauf/nyoze