{"id":15296449,"url":"https://github.com/nimblemvc/framework","last_synced_at":"2026-05-16T13:03:17.553Z","repository":{"id":234705246,"uuid":"789412798","full_name":"NimbleMVC/Framework","owner":"NimbleMVC","description":"Nimble PHP Framework","archived":false,"fork":false,"pushed_at":"2025-04-04T20:34:50.000Z","size":213,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-04-04T21:27:47.314Z","etag":null,"topics":["composer","framework","nimblephp","php8"],"latest_commit_sha":null,"homepage":null,"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/NimbleMVC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2024-04-20T13:30:18.000Z","updated_at":"2025-04-04T20:34:54.000Z","dependencies_parsed_at":"2024-05-17T20:39:44.353Z","dependency_job_id":"adfaa141-3d83-4101-9d91-d07381f69364","html_url":"https://github.com/NimbleMVC/Framework","commit_stats":null,"previous_names":["nimblemvc/framework"],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimbleMVC%2FFramework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimbleMVC%2FFramework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimbleMVC%2FFramework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimbleMVC%2FFramework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NimbleMVC","download_url":"https://codeload.github.com/NimbleMVC/Framework/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248770829,"owners_count":21159045,"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":["composer","framework","nimblephp","php8"],"created_at":"2024-09-30T18:10:32.504Z","updated_at":"2026-05-16T13:03:17.547Z","avatar_url":"https://github.com/NimbleMVC.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\" dir=\"auto\"\u003e\n  \u003cimg alt=\"GitHub License\" src=\"https://img.shields.io/github/license/NimbleMVC/Framework\"\u003e\n  \u003cimg alt=\"Packagist Dependency Version\" src=\"https://img.shields.io/packagist/dependency-v/nimblephp/framework/php\"\u003e\n  \u003cimg alt=\"Packagist Version\" src=\"https://img.shields.io/packagist/v/nimblephp/framework\"\u003e\n\u003c/p\u003e\n\n# \u003ch1 align=\"center\"\u003eNimblePHP\u003c/h1\u003e\nNimblePHP to lekki framework skupiający się na prostocie. Zapewnia wzorzec MVC oraz automatyczne połączenie z bazą danych, dostarczając wszystko, czego potrzebujesz do rozpoczęcia pracy. Jeśli potrzebujesz dodatkowych funkcji, po prostu zainstaluj odpowiedni moduł i zacznij z niego korzystać.\n\n\n**Dokumentacja** projektu dostępna jest pod linkiem: https://nimblemvc.github.io/documentation/\n\n## Dlaczego NimblePHP?\n\n- **Prostota** Brak modułów które dodatkowo ociążają kod\n- **Rozszerzenia** Wszystkie oficjalne rozszerzenia dosępne w jednym miejsciu (pod [tym](https://packagist.org/packages/nimblephp/) linkiem)\n- **Szybki start** Szybka konfiguracja i pierwsze uruchomienie\n\n## Instalacja\nNa samym początku należy zaimportować repozytorium composer\n```shell\ncomposer require nimblephp/framework\n```\nNastępnie należy utworzyć folder public a w nim plik index.php o treści:\n\n```php\n\u003c?php\n\nrequire('../vendor/autoload.php');\n\n$route = new \\NimblePHP\\Framework\\Routes\\Route(new \\NimblePHP\\Framework\\Request());\n$kernel = new \\NimblePHP\\Framework\\Kernel($route);\n$kernel-\u003ehandle();\n```\noraz plik .htaccess z zawartością:\n```text\nRewriteEngine On\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule ^(.+)$ index.php?url=$1 [QSA,L]\n```\nTeraz należy uruchomić plik index.php, pierwsze uruchomienie spowoduje utworzenie folderów wymaganych przez projekt\n\n## CLI\n### Czyszczenie cache\n```shell\nphp vendor/bin/nimble cache:clear\n```\n### Uruchamianie wersji developerskiej aplikacji\n```shell\nphp vendor/bin/nimble serve \u003chost:127.0.0.1\u003e \u003cport:8080\u003e\n```\n\n## Event listeners\nFramework udostępnia teraz `EventDispatcher`, który działa równolegle do obecnego systemu middleware.\n\nNowe rozszerzenia aplikacji warto budować już na eventach:\n\n```php\nuse App\\Event\\AfterTaskAdd;\nuse NimblePHP\\Framework\\Kernel;\n\nKernel::getEventDispatcher()-\u003eaddListener(AfterTaskAdd::class, function (AfterTaskAdd $event): void {\n    // np. webhook, mail, aktualizacja statystyk\n});\n```\n\nNastępnie w aplikacji można wyemitować własny event:\n\n```php\nKernel::dispatchEvent(new AfterTaskAdd($taskId, $payload));\n```\n\nFramework dispatchuje też własne eventy m.in. dla:\n\n- bootstrapu kernela,\n- rozwiązywania requestu i routingu,\n- dispatchu kontrolera,\n- wysyłania response,\n- logów,\n- renderowania widoków,\n- modeli i ORM,\n- lifecycle create/update/delete modeli,\n- operacji na service containerze,\n- rozwiązywania serwisów z kontenera.\n\n\u003e `MiddlewareManager` i interfejsy middleware pozostają dostępne dla kompatybilności, ale są traktowane jako **deprecated / legacy**. Nowy kod powinien używać event listenerów.\n\n## Benchmark Route\nRęczny benchmark routera można uruchomić poleceniem:\n```shell\nphp bin/route-benchmark\n```\nSkrypt wypisuje średni koszt `reload()` dla tras statycznych i dynamicznych oraz porównanie `registerRoutes()` dla cold cache i warm cache.\n\n## Benchmark Cache\nRęczny benchmark cache można uruchomić poleceniem:\n```shell\nphp bin/cache-benchmark\n```\nSkrypt mierzy koszt podstawowych operacji `set()`, `get()`, `has()` i `clear()` dla cache plikowego.\n\n## Współtworzenie\nZachęcamy do współtworzenia! Masz sugestie, znalazłeś błędy, chcesz pomóc w rozwoju? Otwórz issue lub prześlij pull request.\n\n## Pomoc\nWszelkie problemy oraz pytania należy zadawać przez zakładkę discussions w github pod linkiem:\nhttps://github.com/NimbleMVC/Framework/discussions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnimblemvc%2Fframework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnimblemvc%2Fframework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnimblemvc%2Fframework/lists"}