{"id":20586251,"url":"https://github.com/pkit-php/framework","last_synced_at":"2026-01-11T10:51:32.964Z","repository":{"id":40467114,"uuid":"481660074","full_name":"pkit-php/framework","owner":"pkit-php","description":"The Pkit Framework.","archived":false,"fork":false,"pushed_at":"2024-04-26T23:34:39.000Z","size":437,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-16T23:21:14.950Z","etag":null,"topics":["framework","jwt","php","pkit","rest-api"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pkit-php.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-14T15:43:00.000Z","updated_at":"2024-04-26T23:31:38.000Z","dependencies_parsed_at":"2023-02-17T05:01:15.385Z","dependency_job_id":"c3a89160-0a09-42f8-9ac6-b899491c9300","html_url":"https://github.com/pkit-php/framework","commit_stats":null,"previous_names":["pkit-php/framework"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkit-php%2Fframework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkit-php%2Fframework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkit-php%2Fframework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkit-php%2Fframework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pkit-php","download_url":"https://codeload.github.com/pkit-php/framework/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242214934,"owners_count":20090721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["framework","jwt","php","pkit","rest-api"],"created_at":"2024-11-16T07:10:50.411Z","updated_at":"2026-01-11T10:51:32.938Z","avatar_url":"https://github.com/pkit-php.png","language":"PHP","readme":"# Pkit\n\n![https://packagist.org/packages/pkit/pkit](https://img.shields.io/packagist/dt/pkit/pkit)\n![https://packagist.org/packages/pkit/pkit](https://img.shields.io/packagist/v/pkit/pkit)\n![https://packagist.org/packages/pkit/pkit](https://img.shields.io/packagist/l/pkit/pkit)\n\n![https://github.com/pkit-php/pkit/raw/master/icon.png](https://github.com/pkit-php/pkit/raw/master/icon.png)\n\n`Esse projeto está parado para fins de estudo`\n\n```Esse projeto está parado para fins de estudo```\n\nPkit é um framework php para aplicações web que visa facilitar o desenvolvimento de tais projetos.\n\n## Instalação\n\nInstale o Pkit através do [composer](https://getcomposer.org/download/)\n\n`composer require pkit/pkit`\n\n## Como iniciar\n\n- adicione o `.htaccess` para que só considere o `index.php`\n\n    ```php\n    RewriteEngine On\n    RewriteRule . index.php [L,QSA]\n    ```\n\n- inicie o roteador\n\n    ```php\n    \u003c?php\n    //.../index.php\n    require __DIR__ . '/vendor/autoload.php'\n    \n    use Pkit\\Router;\n    /***/\n    // o padrão de rotas são '[root]/routes' e '[root]/public'\n    // pode ser configurado pelo .env 'ROUTE_PATH', 'PUBLIC_PATH', 'DOMAIN', 'SUB_DOMAIN' respectivamente\n    Router::config(__DIR__ . \"/routes\", __DIR__. \"/public\", \"pkit.com\", true);// (opcional)\n    Router::run();\n    ```\n\n## Rotas\n\nas rotas são adicionadas dentro da pasta `routes` e os caminhos são com base nos diretórios e nome dos arquivos, é suportado desde arquivos `.php` até arquivos estáticos como `.css` e `.js`\n\n```php\n.htaccess\nindex.php\npkit/\nroutes/\n├ public/\n│ └ style.css\n├ home.php\n└ index.php\n```\n\nO retorno padrão para a instancia de rotas é `\\Pkit\\Abstracts\\Route`, sendo os métodos da classe os mesmos do HTTP, porem podendo ser retornado qualquer objeto que possa ser chamado ou qualquer string.\n\n```php\n\u003c?php\n//.../routes/**/*.php\nuse Pkit\\Abstracts\\Route;\nuse Pkit\\Http\\Response;\n\n// classe abstrata para adição de rotas por método\nclass index extends Route\n{\n  public function GET($request)\n  {\n    return new Response('GET');\n  }\n\n  public function POST($request)\n  {\n    return new Response('POST');\n  }\n\n}\n\n// A rota funciona com base em objetos que podem ser chamados ou string retornadas\nreturn new Index;\n```\n\n### Rotas avançadas\n\nAs rotas avançadas são aquelas que recebem variáveis em meio as rotas\n\n```php\n.htaccess\nindex.php\npkit/\nroutes/\n├ [id]/\n│ ├ [repo]/\n│ │ ├ [...file].php\n│ │ └ index.php\n│ └ index.php\n├ home.php\n└ index.php\n```\n\n- `[abc]` : qualquer coisa entre barras\n- `[abc=int]` / `[abc=integer]` : qualquer numero sem casas decimais entre barras\n- `[abc=float]` : qualquer numero flutuante entre barras\n- `[abc=word]` : qualquer palavra entre barras\n- `[...abc]` : qualquer coisa depois da barra\n\nEsses parâmetros são pegos através da instancia estática do Router\n\n```php\n\u003c?php\n//.../routes/[id=int]/[repo=word]/[...file].php\n\nuse PKit\\Abstracts\\Route;\nuse PKit\\Router;\n\nclass FileByRepo extends Route\n{\n  public function GET($request)\n  {\n    /**\n     * $params = [\n     *  'id' =\u003e '[1-9]*',\n     *  'repo' =\u003e '[\\w]*'\n     *  'file' =\u003e '.*'\n     * ]\n     */\n    $params = Router::getParams();\n    /***/\n    return new Response(/***/);\n  }\n}\n\nreturn new FileByRepo;\n```\n\n### Rota especial\n\nAs rota interceptam erros das rotas, ainda funcionando como um rota comum, contudo qualquer método HTTP é pego pelo método `ALL`. Essa rota deve ser chamada de '*.php' e estar no pasta `routes`.\n\n```php\n\u003c?php\n//.../routes/*.php\nnamespace Pkit\\Middlewares;\n\nuse Pkit\\Abstracts\\Route;\nuse Pkit\\Http\\Response;\n\nclass EspecialRoute extends Route\n{\n // esse método intercepta erros em qualquer um dos métodos HTTP\n  public function ALL($request, $err)\n  {\n  /***/\n  return new Response(/***/);\n  }\n}\n```\n\n## Middlewares\n\nOs Middlewares são intermediários das rotas, podendo conter parâmetros para uma configuração dinâmica.\n\n```php\n\u003c?php\n//.../app/middlewares/teste.php\nnamespace App\\Middlewares;\n\nuse Pkit\\Abstracts\\Middleware;\n\nclass Teste extends Middleware {\n  // Os middlewares são baseados em closures\n    public function __invoke($request, $next, $params = null)\n    {\n        echo 'teste';\n        /***/\n        return $next($request);\n    }\n}\n```\n\nEles são tanto definidos em um atributo publico chamado `$middlewares` da classe `\\Pkit\\Abstracts\\Route` quanto por atributos definidos acima do método.\n\n```php\n\u003c?php\n//.../routes/home.php\nuse App\\Middlewares\\Teste;\n/***/\nuse Pkit\\Abstracts\\Route;\nuse Pkit\\Middlewares\\Auth;\nuse Pkit\\Middlewares;\nuse Pkit\\Http\\Response;\n\nclass Home extends Route {\n\n    public $middlewares = [\n      Teste::class, // middlewares adicionados\n      /***/\n      // chaves nomeados são pra métodos específicos\n      'POST' =\u003e [\n      // os valores são passados como parâmetros para o Middleware\n        Auth::class =\u003e \"jwt\",\n      ],\n    ];\n\n    function GET($request)\n    {\n      /***/\n      return new Response(/***/);\n    }\n\n    // os atributos podem ser usado para definir os middlewares\n    #[Middlewares([Auth::class =\u003e \"session\",])]\n    function POST($request)\n    {\n      /***/\n      return new Response(/***/);\n    }\n}\n\nreturn new Home;\n```\n\n### middlewares do framework\n\n- `Pkit/Middlewares/Auth`  : autentica o usuário com base na sessão\n  - Os possíveis parâmetros são “jwt”, “session” ou a sequência configuradas por array\n- `Pkit/Middlewares/Maintenance` : indica um rota em manutenção\n\n## Session\n\n```php\n\u003c?php\n // .../index.php\nrequire __DIR__ . '/pkit/load.php';\n\nuse Pkit\\Auth\\Session;\n/***/\n// pode ser configurado pelo .env 'SESSION_EXPIRES' e 'SESSION_PATH' respectivamente\nSession::config(/*tempo em segundos*/, /*caminho para a sessão(opcional)*/);// (opcional)\n/***/\n```\n\n### login\n\n```php\n\u003c?php\n//.../routes/login.php\nuse Pkit\\Abstracts\\Route;\nuse Pkit\\Auth\\Session;\nuse Pkit\\Http\\Response;\n\nclass Login extends Route {\n\n    function GET($request)\n    {\n        /***/\n        Session::login([\n          'id' =\u003e '1234',\n          'name' =\u003e 'user...'\n        ]);\n        return new Response(\"logged\");\n    }\n\n  /***/\n}\n\nreturn new Login;\n```\n\n### logout\n\n```php\n\u003c?php\n//.../routes/logout.php\nuse Pkit\\Abstracts\\Route;\nuse Pkit\\Auth\\Session;\nuse Pkit\\Http\\Response;\nuse Pkit\\Middlewares\\Auth;\nuse Pkit\\Middlewares;\n\nclass Logout extends Route {\n\n    #[Middlewares([\n      Auth::class =\u003e 'session'\n    ])]\n    function GET($request)\n    {\n        /***/\n        Session::logout();\n        return new Response(\"logged out\");\n    }\n  \n  /***/\n}\n\nreturn new Logout;\n```\n\n## Jwt\n\n```php\n\u003c?php\n//.../routes/logout.php\nuse Pkit\\Auth\\Jwt;\n/***/\n// pode ser configurado pelo .env 'JWT_KEY', 'JWT_EXPIRES' e 'JWT_ALG' respectivamente\nJwt::config(/*chave para criptografia*/, /*tempo de expiração em segundos (opcional)*/, /*algoritmo de criptografia (opcional)*/));\n/***/\n```\n\n### token\n\n```php\n\u003c?php\n//.../routes/login.php\nuse Pkit\\Abstracts\\Route;\nuse Pkit\\Auth\\Jwt;\nuse Pkit\\Middlewares\\Auth;\n\nclass Login extends Route {\n\n    #[Middlewares([\n      Auth::class =\u003e 'jwt'\n    ])]\n    function GET($request)\n    {\n      /***/\n      // pega o token enviado pelo header 'Authorization'\n      $token = Jwt::getBearer();\n      return new Response(Jwt::getPayload($token));\n    }\n\n    function POST($request)\n    {\n      /***/\n      $token = Jwt::tokenize(/*payload*/);\n      // envia o token pelo header 'Authorization'\n      Jwt::setBearer($token);\n      return new Response(Jwt::getPayload($token));\n    }\n\n  /***/\n}\n\nreturn new Login;\n```\n\n## Variáveis de ambiente especiais\n\n```php\nMIDDLEWARES_NAMESPACE=\\App\\Middlewares # namespace onde se encontra os middlewares que não são do framework\nROUTE_PATH=/var/www/pkit/routes\nPUBLIC_PATH=/var/www/pkit/public\nVIEW_PATH=/var/www/pkit/view\nSESSION_TIME=0 # tempo da sessão do PHP\nSESSION_PATH=/var/lib/php/sessions # path da sessão\nJWT_KEY=abcde # chave do JWT\nJWT_EXPIRES=0 # tempo de expiração do JWT\nJWT_ALG=0 # algoritmo de criptografia do JWT\nDOMAIN=pkit.com # domínio a ser desconsidera ao procura o subdomínio\nSUB_DOMAIN=true # se true o subdomínio declarado será considerado com parte da URI\nPKIT_DEBUG=true # se true, caso aja erro, mostra uma pagina com o código de erro e a mensagem do erro\nPKIT_CLEAR=false # se false, mantêm o conteúdo renderizado mesmo que tenha sido ocasionado um erro\n```\n\n***Para mais informações acesse as documentações nas pastas no framework***\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkit-php%2Fframework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpkit-php%2Fframework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkit-php%2Fframework/lists"}