Download the PHP package psf/framework without Composer

On this page you can find all versions of the php package psf/framework. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package framework

PSF Micro-Framework PHP (Beta)

O PSF (psf/framework) é um micro-framework PHP para construir APIs JSON. Rotas e models são declarados com attributes do PHP 8, as consultas passam por um único query builder que gera SQL para MySQL, PostgreSQL, SQL Server e SQLite, e as migrations rodam sobre o Phinx, com comandos que geram migrations a partir dos models e models a partir das tabelas. O framework também traz um monitor de observabilidade que grava métricas de requests, queries e exceções no banco do próprio projeto.

O framework está em fase Beta. Ele é uma biblioteca consumida por outros projetos, por isso as APIs públicas são mantidas retrocompatíveis (ver Versionamento).

O que o diferencia

Requisitos

Opcionais (seção suggest do composer.json):

Pacote / extensão Para quê
ext-apcu Cache de rotas e de metadados dos models entre requisições
ext-curl Psf\Http\Http::request e Psf\Http\Request
aws/aws-sdk-php Psf\Utils\CloudStorage (Cloudflare R2)
robmorgan/phinx Comando vendor/bin/psf (migrations, geradores e comandos do monitor)

Psf\Utils\Email usa o PHPMailer (phpmailer/phpmailer), que também precisa ser instalado pelo projeto.

Instalação

Início rápido

Estrutura do projeto

O vendor/bin/psf procura, na raiz do projeto e nesta ordem, bootstrap/app.php, config/bootstrap.php, bootstrap.php ou config.php, e usa o primeiro que encontrar como arquivo de configuração. Ele precisa retornar o array de config.

config.php

Outras conexões podem ser declaradas em db (por exemplo 'legado' => [...]) e usadas com #[Database('legado')] no model.

public/index.php e .htaccess

O Router lê o caminho em $_GET['_url']. As rotas vêm dos diretórios em settings.controllers; o construtor do Router ainda aceita uma lista de classes (formato antigo), mas não a utiliza.

Um model

Um controller

GET /v1/usuarios/42 chama show(42). Http::response() envia o JSON ({"message": ..., "data": ...}) e encerra a execução com exit: nada depois dele roda.

O verificador de settings.verifyauth é um método sem argumentos. Retornar true ou um objeto libera a rota (o objeto fica em Router::$auth); qualquer outro retorno responde 401:

Uma consulta

Referências a propriedades (Usuario::col('createdAt'), Usuario::class . '.createdAt' ou alias.createdAt) são traduzidas para a coluna (created_at). Como o model tem #[ColumnDeletedDate], a consulta já filtra deleted_at IS NULL.

Arquitetura

Funcionalidades

Roteamento

Detalhes em docs/rotas.md.

Models e CRUD

$model->create(), save(), delete() (soft delete com #[ColumnDeletedDate]), assign($dados), toArray(), Usuario::createMany([...]) para inserção em lote, e transações pelo controller (initTransaction(), commitTransaction(), rollBackTransaction(), runServiceTransaction()). Attributes disponíveis: Table, Database, Column, PrimaryKey, Type, Nullable, Standard ('UUIDV4' gera UUID), ColumnCreatedDate, ColumnUpdatedDate, ColumnDeletedDate e Enum. Ver docs/guia.md.

Query builder

andWhere/orWhere (array, associativo ou string com bindings), operadores =, <>, !=, >, <, >=, <=, LIKE, NOT LIKE, IN, NOT IN, BETWEEN, IS NULL; innerJoin, leftJoin, leftJoinAndSelect, fields, groupBy, orderBy, limit, alias, asArray; e os finalizadores one, all, count, exist, sum e paginator. Expressões SQL em fields/groupBy/orderBy só aceitam funções de uma lista permitida. O modo estrito (settings.strictQueries ou ->strict()) faz uma referência que não resolve lançar erro em vez de gerar SQL quebrado. Ver docs/query-builder.md.

Bancos de dados

Driver DBDriver Observações
MySQL / MariaDB DBDriver::MySQL padrão quando driver não é informado
PostgreSQL DBDriver::PostgreSQL schema public na listagem de tabelas
SQL Server DBDriver::SQLServer schema dbo
SQLite DBDriver::SQLite database é o caminho do arquivo ou :memory:

Configs antigas podem passar o valor inteiro do enum ('driver' => 1). Ver docs/database.md.

Autenticação, JWT e CORS

Documentação da API

Com settings.docsapi ('api/docs', ou ['path' => 'api/docs', 'username' => ..., 'password' => ...] para exigir HTTP Basic), o caminho configurado mostra as rotas que têm docs no attribute, agrupadas por docs.category. ?format=json devolve o mesmo conteúdo em JSON. A URL base exibida vem de config['project']['domain'].

Utilitários

Observabilidade (monitor)

O monitor grava métricas de cada request da API no banco do próprio projeto, sem infraestrutura nova e sem UI: cada projeto decide como consumir os dados (SQL direto, Grafana, Metabase ou um endpoint próprio usando o Reader).

O que é registrado

Como funciona

Ativação

Os valores acima são os padrões (exceto enabled e release). Também existem maxEventsPerRequest (200), breaker (failures 3, cooldownSeconds 300), connectTimeout (1 s), exposeRequestId (true), storeUser (true), userIdProperty ('id'), storeExceptionMessage (true) e autoMigrate (false; cria as tabelas sozinho fora de prd) e api (['enabled' => false]; liga o serviço MonitorApi).

Leitura dos dados: Psf\Monitor\Reader oferece routes(), slowQueries(), exceptions(), external() e throughput() sobre os agregados de um intervalo, e request($requestId) com o detalhe bruto de um request. Opcionalmente, Psf\Monitor\Api\MonitorApi valida os parâmetros e devolve [mensagem, dados, status] para o controller do projeto (desligada por padrão, settings.monitor.api.enabled, e sem rotas próprias). O framework não expõe esses dados sozinho: a autenticação e a autorização de um endpoint de métricas ficam por conta do projeto.

Estado atual: as fases 1 a 3 e a Parte A da fase 4 estão entregues (requests, queries, exceções, agregados, retenção, Reader, chamadas externas e o serviço JSON opcional MonitorApi). Quem já usa o monitor precisa rodar vendor/bin/psf monitor:install para criar a 6ª tabela (psf_monitor_external). A Parte B (validação em bancos reais) está concluída para MySQL 8.4 e PostgreSQL 16; apenas o SQL Server segue pendente. Além do SQLite, as migrations, as gravações, o rollup, o prune, o Reader, a MonitorApi e os comandos foram validados em MySQL 8.4 e PostgreSQL 16 reais (suíte tests/Drivers, ver Validação em bancos reais); essa validação corrigiu a instalação no MySQL e o Read::exe() no PostgreSQL. SQL Server ainda não foi validado (pendente); valide em homologação antes de usar com ele.

A referência completa (esquema das tabelas, regras dos agregados, limites conhecidos) está em docs/observabilidade.md.

Comandos CLI

O framework instala o binário psf do Composer. Em projetos consumidores use vendor/bin/psf; dentro deste repositório, ./bin/psf (ou ./bin/phinx). É um wrapper: ele encontra o autoloader e o arquivo de config do projeto, chama PSF::init(), transforma cada entrada de config['db'] num ambiente do Phinx e acrescenta os comandos do PSF. Não use o Phinx puro (vendor/robmorgan/phinx/bin/phinx) com o PSF.

Comando O que faz
create NomeDaMigration Cria uma migration em branco
migrate [-e conexao] Roda as migrations pendentes (-e = chave de config['db'])
rollback Desfaz a última migration
status Mostra o estado das migrations
seed:create / seed:run Cria e executa seeds
make:migration-from-model 'App\Models\Usuario' Cria uma migration comparando o model com o estado atual do banco
make:model-from-table usuarios 'App\Models\Usuario' Gera um model PSF (com attributes) a partir de uma tabela
analyze:table-vs-model usuarios 'App\Models\Usuario' [-o arquivo] Compara a tabela com o model e mostra as diferenças
monitor:install [-e banco] Instala as tabelas do monitor
monitor:status [-e banco] Mostra o estado do monitor
monitor:rollup [-e banco] [--max-hours N] Agrega por hora os registros brutos
monitor:prune [-e banco] Apaga registros brutos e agregados fora da retenção
monitor:maintain [-e banco] [--max-hours N] Rollup seguido da limpeza (o comando para o cron)

vendor/bin/psf é o nome estável. O robmorgan/phinx também declara um binário phinx e o Composer mantém o primeiro que instalar: vendor/bin/phinx só é o wrapper do PSF quando o Composer ligou o do PSF (continua com esse nome por compatibilidade); num projeto que já tinha o Phinx, ele segue sendo o Phinx puro, sem os comandos make:* e monitor:*. Por isso prefira sempre vendor/bin/psf.

As migrations do projeto vão para db/migrations e os seeds para db/seeds, na raiz do projeto (crie as pastas; o Phinx não as cria). Sem um phinx.php próprio no diretório atual, o wrapper usa a config do framework; -c arquivo escolhe outra. As tabelas do monitor usam migrations próprias, fora desse caminho, com a tabela de controle psf_monitor_migrations.

Testes e qualidade

Os testes rodam com apc.enable_cli = 0 e com a constante PSF_TESTING, que faz o Http::response() lançar HttpResponseException em vez de chamar exit. No momento desta revisão, a suíte completa roda 808 testes (2532 asserções) e pula 69 (os 67 da suíte de drivers, que só roda com PSF_DRIVERS=1, e 2 que dependem de bibliotecas opcionais). A suíte de drivers roda 67 testes (33 no MySQL 8.4 e 34 no PostgreSQL 16). A CI (GitHub Actions) executa os testes em PHP 8.2, 8.3 e 8.4 e a análise estática.

Estrutura do repositório

Documentação

Arquivo Conteúdo
docs/introducao.md Visão geral e estrutura de pastas
docs/guia.md Guia prático: instalação, configuração, models, controllers, rotas, CRUD, migrations e testes
docs/rotas.md Attribute #[Router], parâmetros, erros, CORS e cache de rotas
docs/models.md Models e attributes
docs/query-builder.md Referência do query builder
docs/database.md Drivers, chaves de configuração, erros e transações
docs/helpers.md Helpers utilitários
docs/exemplos.md Exemplos curtos de controllers
docs/observabilidade.md Monitor: configuração, esquema das tabelas, agregados, Reader e limites
docs/melhorias.md Histórico das melhorias da v0.0.10 à v0.4.0
docs/ROADMAP.md Roadmap de melhorias
CHANGELOG.md Mudanças ainda não lançadas e mudanças de comportamento

Status e limites

Versionamento e compatibilidade

O PSF é consumido por outros projetos: as APIs públicas são mantidas retrocompatíveis, e mudanças de comportamento são listadas no docs/melhorias.md). As versões são publicadas como tags git.

Contribuindo

Este projeto está em fase Beta, e aceitamos sugestões e feedbacks. No momento, a contribuição está limitada a um grupo privado devido à licença do framework.

Antes de propor uma mudança, rode composer test e composer analyse. Código, comentários e documentação são escritos em português do Brasil.

Licença

Este projeto é licenciado sob uma licença privada. Entre em contato para mais informações sobre o uso e distribuição.

Contato

Para dúvidas ou suporte, entre em contato pelo e-mail: [email protected]


All versions of framework with dependencies

PHP Build Version
Package Version
Requires php Version >=8.1
ext-pdo Version *
jenssegers/agent Version ^2.6
spatie/ignition Version ^1.11
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package psf/framework contains the following files

Loading the files please wait ...