{"id":42342535,"url":"https://github.com/unhandled-exception/pf2","last_synced_at":"2026-01-27T15:09:12.782Z","repository":{"id":13287130,"uuid":"74888083","full_name":"unhandled-exception/pf2","owner":"unhandled-exception","description":"Веб-фреймворк для языка Parser 3","archived":false,"fork":false,"pushed_at":"2025-07-29T06:46:35.000Z","size":4438,"stargazers_count":9,"open_issues_count":1,"forks_count":3,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-07-29T08:51:24.301Z","etag":null,"topics":["mvc-framework","orm","parser3","web"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/unhandled-exception.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null}},"created_at":"2016-11-27T13:04:25.000Z","updated_at":"2025-07-29T06:46:37.000Z","dependencies_parsed_at":"2024-05-15T21:01:42.302Z","dependency_job_id":"bb020850-1a42-4b52-8939-ac80ca1f386a","html_url":"https://github.com/unhandled-exception/pf2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/unhandled-exception/pf2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unhandled-exception%2Fpf2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unhandled-exception%2Fpf2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unhandled-exception%2Fpf2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unhandled-exception%2Fpf2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unhandled-exception","download_url":"https://codeload.github.com/unhandled-exception/pf2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unhandled-exception%2Fpf2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28815392,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["mvc-framework","orm","parser3","web"],"created_at":"2026-01-27T15:09:11.665Z","updated_at":"2026-01-27T15:09:12.777Z","avatar_url":"https://github.com/unhandled-exception.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"PF2 — веб-фреймворк для Parser 3\n================================\n\nPF2 помогает разработчикам писать веб-приложения. Фреймворк реализует шаблон проектирования MVC. PF2 — переработанная версия [библиотеки PF](https://github.com/unhandled-exception/pf).\n\nСтабильная версия в ветке master. Разрабатываем в ветках feature/name, все изменения только через пул-реквесты. Для нового кода обязательно пишем тесты в папке ut/.\n\nАвторы:\n* Олег Волчков ([oleg@volchkov.net](mailto:oleg@volchkov.net), [unhandled-exception.ru](http://unhandled-exception.ru))\n* Алексей Марьин ([groundzero.ru](http://groundzero.ru))\n\n## Установка и простое приложение\n\nВ [папку с классами](http://www.parser.ru/docs/lang/app1pathclass.htm) загрузите библиотеку. Папка должна называться pf2. Папку со своими классами и классами pf2 положите вне веб пространства.\n\nВ auto.p прописываем путь к папке в которую положим pf2:\n```\n$CLASS_PATH[^table::create{path\n/../vendor/\n}]\n```\n\nУстанавливаем pf2 в папку /../vendor/pf2 вне веб-пространства:\n```\ncd ~/mysite.ru/vendor\ngit clone https://github.com/unhandled-exception/pf2.git\n```\n\nВ Апаче пропишите команды:\n```\nReqriteEngine on\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteRule ^ index.html [L]\n```\n\nТеперь все запросы к нашему сайту веб-сервер отправит на файл index.html.\n\nВ index.html напишем первое приложение:\n\n```\n@USE\npf2/lib/web/controllers.p\n\n\n@main[][locals]\n  $site[^Site::create[]]\n  ^site.run[]\n\n\n@CLASS\nSite\n\n@BASE\npfController\n\n@OPTIONS\nlocals\n\n@create[aOptions]\n  ^BASE:create[$aOptions]\n  ^router.assign[/hello/:name;/hello]\n\n@/[aRequest]\n  Это мой сайт.\n\n@/hello[aRequest]\n  Привет, ^ifdef[$aRequest.name]{мир}!\n\n@/NOTFOUND[aRequest]\n  $result[\n    $.status[404]\n    $.body[Страница не найдена.]\n  ]\n```\n\nПопробуйте открыть страницы mysite.ru/, mysite.ru/hello/world/, mysite.ru/hello/Иванопуло, mysite.ru/404.\n\n## Примеры\n\n### [pf2-secrets-app](https://github.com/unhandled-exception/pf2-secrets-app)\n\nЗаконченное приложение на pf2 с моделями, контролерами и шаблонами. Сайт помогает пользователям передавать секретные сообщения коллегам и друзьям через интернет. Сообщение защищаем пин-кодом и уничтожаем как только получатель откроет ссылку и введет правильный пин-код.\n\n### [pf2-project-template](https://github.com/unhandled-exception/pf2-project-template)\n\nШаблон приложения на pf2. Это не готовое приложение, а один из возможных способов организации приложения на pf2.\n\n## Тесты\n\nТесты лежат в папке [ut/](ut/). Фреймворк для тестирования в [lib/tests](lib/tests/).\n\nТестовый фреймворк lib/tests/unittest.p сделан по мотивом Python Unittest, не использует классов pf2 и может быть использован для тестирования любого Парсеровского кода без импортов pf2.\n\n## Документация\n\n* [Список классов в модулях](classes.md)\n* [Концепция и стили кодирования](docs/concepts.md)\n\n### MVC\n\n* [Контролеры и маршрутизация](docs/controllers.md)\n* Мидлваре\n\n### Модели\n\n* [ORM-классы](docs/sql/sql_table.md)\n* [Очередь задач](docs/sql/generics/queue.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funhandled-exception%2Fpf2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funhandled-exception%2Fpf2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funhandled-exception%2Fpf2/lists"}