{"id":15030005,"url":"https://github.com/arefshojaei/lite-php","last_synced_at":"2026-01-03T14:47:35.604Z","repository":{"id":205094994,"uuid":"713400438","full_name":"ArefShojaei/Lite-PHP","owner":"ArefShojaei","description":"Micro PHP Freamework | Modular Structure | Just Pure!","archived":false,"fork":false,"pushed_at":"2024-05-22T18:57:24.000Z","size":585,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-22T19:04:09.991Z","etag":null,"topics":["api","backend","freamework","hook","lite-php","modular","module","php","php-framework","php8","plugin","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ArefShojaei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-11-02T12:55:50.000Z","updated_at":"2024-05-28T23:48:37.391Z","dependencies_parsed_at":"2023-11-12T16:26:27.371Z","dependency_job_id":"30a7a15e-a77e-4086-ac7e-dc6f3ce17d5b","html_url":"https://github.com/ArefShojaei/Lite-PHP","commit_stats":{"total_commits":423,"total_committers":2,"mean_commits":211.5,"dds":0.007092198581560294,"last_synced_commit":"ea440b2192bd1c8869f1bf85710e51500049ec03"},"previous_names":["arefshojaei/lite-php"],"tags_count":106,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArefShojaei%2FLite-PHP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArefShojaei%2FLite-PHP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArefShojaei%2FLite-PHP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArefShojaei%2FLite-PHP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ArefShojaei","download_url":"https://codeload.github.com/ArefShojaei/Lite-PHP/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244066191,"owners_count":20392407,"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":["api","backend","freamework","hook","lite-php","modular","module","php","php-framework","php8","plugin","rest-api"],"created_at":"2024-09-24T20:12:12.794Z","updated_at":"2026-01-03T14:47:35.597Z","avatar_url":"https://github.com/ArefShojaei.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg width=\"1856\" height=\"1170\" alt=\"Poster\" src=\"https://github.com/user-attachments/assets/70f51422-ef52-4239-b89e-12c6f0de0836\" /\u003e\n\n\n##  Tutorial :\n1. [Introduction](#introduction)\n    * [What is Lite-PHP ?](#what-is-lite-php)\n    * [Why Lite-PHP ?](#why-lite-php)\n2. [Installation](#installation)\n3. [Flow chart of process](#view-of-lite-php-process-in-application)\n4. [Folder Structure](#folder-structure)\n    * [core/](#core)\n    * [bootstrap/](#bootstrap)\n    * [public/](#public)\n    * [modules/](#modules)\n    * [plugins/](#plugins)\n    * [console/](#console)\n    * [resources/](#resources)\n    * [hooks/](#hooks)\n    * [migrations/](#migrations)\n    * [storage/](#storage)\n5. [Root Files](#root-files)\n    * [.env.example](#envexample)\n    * [.gitignore](#gitignore)\n    * [.htaccess](#htaccess)\n    * [cli](#cli)\n    * [composer.json](#composerjson)\n    * [gulpfile.mjs](#gulpfilemjs)\n    * [init](#init)\n    * [package.json](#packagejson)\n    * [README.md](#readmemd)\n    * [robots.txt](#robotstxt)\n    * [server.php](#serverphp)\n6. [Modules](#modules)\n    * [alias](#Alias)\n    * [config](#config)\n    * [enum](#enum)\n    * [plugin](#plugin)\n    * [validator](#validator)\n7. [Template Engine](#template-engine)\n8. [Cli ( console )](#cli-1)\n9. [Helpers](#helpers)\n    * [import](#import)\n    * [route](#route)\n    * [dd](#dd)\n    * [parse](#parse)\n    * [view](#view)\n    * [command](#command)\n    * [test](#test)\n    * [abort](#abort)\n    * [build](#build)\n    * [translate](#translate)\n    * [url](#url)\n    * [assets](#assets)\n    * [validator](#validator-1)\n    * [assert](#assert)\n10. [Hooks](#hooks)\n    * [useHTTP](#usehttp)\n    * [useGET](#useget)\n    * [usePOST](#usepost)\n    * [useFetch](#usefetch)\n    * [useID](#useid)\n    * [useConfig](#useconfig)\n    * [useEnum](#useenum)\n    * [useState](#usestate)\n    * [useGlobal](#useglobal)\n    * [useHash](#usehash)\n    * [usePasswordVerfiy](#useverifypassword)\n    * [useHTML](#usehtml)\n    * [useMode](#usemode)\n    * [useEnv](#useenv)\n    * [useLog](#uselog)\n    * [useError](#useerror)\n    * [usePlugin](#useplugin)\n    * [useQuery](#usequery)\n    * [useResponse](#useresponse)\n    * [useRequest](#userequest)\n    * [useRedirect](#useredirect)\n    * [useURL](#useurl)\n    * [useBody](#usebody)\n    * [useHeader](#useheader)\n    * [useMatch](#usematch)\n    * [useFlash](#useflash)\n    * [useFile](#usefile)\n    * [useUpload](#useupload)\n    * [useCache](#usecache)\n    * [useCookie](#usecookie)\n    * [useSession](#usesession)\n    * [useToken](#usetoken)\n    * [useVerifyToken](#useverifytoken)\n    * [useValidator](#usevalidator)\n    * [useAction](#useaction)\n    * [useTable](#usetable)\n    * [useRecord](#userecord)\n\u003cbr/\u003e\n\n##  **Introduction**\n\n### What is Lite-PHP ?\n\u003e Lite-PHP is a Micro Framework\nfor developing Back-end applications\n\n### Why Lite-PHP ?\nBecause Lite-PHP has:\n\n\u003e **Simple \u0026 Fast Development Env**\n\n\u003e **Modular Strucutre**\n\n\u003e **DBMS Like Mysql**\n\n\u003e **Testing Module**\n\n\u003e **Custom Plugins \u0026 Hooks**\n\n\u003e **Custom Command-line in console**\n\n\u003e **REST API Development**\n\n\u003e **Functional Programming Structure**\n\n\u003e **Folder Strucutre**\n\n\u003e **No OOP \u0026 No Object \u0026 No Class**\n\n\u003cbr /\u003e\n\n## **Installation**\n\n#### Using Composer\n```bash\ncomposer create-project arefshojaei/lite-php\n```\n\n#### Using GIT\n```bash\ngit clone https://github.com/ArefShojaei/Lite-PHP\n```\n\u003cbr /\u003e\n\n## **View of LITE PHP process in application**\n![flow](https://github.com/user-attachments/assets/ad9d887d-79d2-4036-a384-b3c6abe08836)\n\n\n## **Folder Structure**\nHere is default folder structure for starting new project !\n\n```bash\n|- bootstrap/\n|\n|- console/\n|\n|- core/\n|\n|- hooks/\n|\n|- migrations/\n|\n|- modules/\n|\n|- plugins/\n|\n|- public/\n|\n|- resources/\n|\n|- storage/\n|\n|\n|- .env.example\n|- .gitignore\n|- .htaccess\n|- cli\n|- composer.json\n|- gulpfile.mjs\n|- init\n|- package.json\n|- README.md\n|- robots.txt\n|- server.php\n```\n\n### core/\n\u003e Main files or **Lite-PHP core** files that\ncan be provided base files for every projects!\n\n### bootstrap/\n\u003e Base files to **boot the app**\n\n### modules/\n\u003e Modules that the app needs to run as main file\n\n### hooks/\n\u003e Lets you to development **custom hooks**\n\n### migrations/\n\u003e Lets you to work with database\n\n### plugins/\n\u003e Lets you to development **custom plugin**\n\n### public/\n\u003e **Static files in production** with entry point file ( index.php )\n\n### resources/\n\u003e **Asset and View** files\n\n### storage/\n\u003e Local folder \u0026 files like **Log, Cache \u0026 Upload** ...\n\n\u003cbr/\u003e\n\n## **Root Files**\n\n### .env.example\n\u003e **This is a config for ENV** , Then before starting the project you must changed it from **.env.example** to **.env** file! \n\n### .gitignore\n\u003e This is a config to **hide \nfiles** to not push on Github\n\n### .htaccess\n\u003e **Apache** web server config\n\n### cli\n\u003e Console configuration to **use commands**\n\n### composer.json\n\u003e Passport of package info\n\n### gulpfile.mjs\n\u003e **Task-runner** configuration for assets\n\n### init\n\u003e Basic setup configuration to **development app**\n\n### package.json\n\u003e List of **pacakge dependencies that the Task-runner needs to run**\n\n### README.md\n\u003e **Lite-PHP** Package info\n\n### robots.txt\n\u003e **This is configuration for crawlers of Google**\n\n### server.php\n\u003e **Main file** for launching the app\n\n\u003cbr/\u003e\n\n## **Modules**\n\n### Alias\n\u003e Registers custom Alias\n\n#### 1-Example:\n```php\n# Before\nrequire_once \"../../../modules/user/_controller.php\";\nrequire_once \"../console/commands/package/_main.php\";\n\n# After + without using '.php' ext\nimport(\"@modules/user/_controller\")\nimport(\"@commands/package/_main\")\n```\n\n#### 2-How can I use that ?\nMove to **\"bootstrap/alias.php\"**\nThen, register an Alias by this way :\n\n```php\ncreateAlias([\n   # Guide\n   \"@\u003calias\u003e\" =\u003e dirname(__DIR__) . \"path\",\n\n   # Example\n    \"@core\" =\u003e dirname(__DIR__) . \"/core\",\n    \"@modules\" =\u003e dirname(__DIR__) . \"/modules\",\n    ...\n]);\n```\n\n### Config\n\u003e Registers new configuration for a module\n\n#### 1-How can I create a config ?\n\n```php\nimport(\"@core/modules/config/createConfig\");\n\ncreateConfig(\"name\", [\n    \"key\" =\u003e \"value\"\n]);\n```\n\n#### 2-How can I use the config ?\n\n```php\nimport(\"@core/hooks/useConfig\");\n\n\n# Usage\nuseConfig(\"name.key\");\n```\n\n### Enum\n\u003e Registers an Enum as constant\n\n#### 1-How can I create an Enum ?\n\n```php\nimport(\"@core/modules/enum/createEnum\");\n\ncreateEnum(\"name\", [\n    \"KEY\" =\u003e \"value\"\n]);\n```\n\n#### 2-How can I use the Enum ?\n\n```php\nimport(\"@core/hooks/useEnum\");\n\n\n# Usage\nuseEnum(\"name::KEY\");\n```\n\n### Migration\n\u003e Registers a Migration\n\n#### 1-How can I create a Migration ?\n\n```bash\nphp cli make:migration [migration-name]\n```\n\n```php\nimport(\"@core/modules/migration/createMigration\");\nimport(\"@core/helpers/migration\");\n\ncreateMigration(\"table-name\", [\n    \"up\" =\u003e function(string $table) {\n        column_id(...);\n        column_string(...);\n    },\n    \"down\" =\u003e function(string $table) {\n        table_dropIfExists(...);\n    },\n]);\n```\n\n#### 2-How can I use the migration ?\n\n```bash\nphp cli list\n    \u003e php cli migrate\n    \u003e php cli migrate [table-name]\n    \n    \u003e php cli migrate:reset\n    \u003e php cli migrate:reset [table-name]\n    \u003e \n    php cli migrate:refresh\n    \u003e php cli migrate:refresh [table-name]\n```\n\n### Plugin\n\u003e Registers new Plugin\n\nNote: We have **two types** for using plugin :\n\n\u003e 1. **Runner Type** needs to register in         **\"bootstrap/providers.php\"**\n\n\u003e 2. **Usage Type** needs to use in **function or logic code**\n\n#### 1-How can I create a **Runner type** Plugin ?\n\n```php\nimport(\"@core/modules/plugin/createPlugin\");\n\n# Usage\ncreatePlugin(\"name\", function ($params) {}, false);\n```\n\n#### 2-How can I use the Runner Plugin ?\nMove to **\"bootstrap/providers.php\"** , then use this way to register the Runner Plugin\n\n```php\n\"plugins\" =\u003e [\n    # Usage\n    registerPlugin(\"name\"),\n    \n    \n    # Examples\n    registerPlugin(\"logger\", [\"level\" =\u003e \"short\"]),\n    registerPlugin(\"security\"),\n    registerPlugin(\"cors\"),\n],\n```\n\n#### 3-How can I create a **Usage type** Plugin ?\n\n```php\nimport(\"@core/modules/plugin/createPlugin\");\n\n# Usage\ncreatePlugin(\"name\", function () {});\n```\n\n#### 4-How can I use the Usage Plugin ?\n\u003e Note: for using the plugin, you should use this way \n\n```php\nimport(\"@core/hooks/usePlugin\");\n\n\n# Usage\nlist(...) = usePlugin(\"name\");\n```\n\n### Validator\n\u003e Defines Schema for input data \n\n#### 1-How can I create a Schema ?\n\n```php\nimport(\"@core/modules/validator/createValidator\");\n\ncreateValidator(\"post\", [\n    \"id\" =\u003e [\n        \"type\" =\u003e \"int\",\n        \"required\" =\u003e true,\n    ],\n\n    \"title\" =\u003e [\n        \"type\" =\u003e \"string\",\n        \"min\" =\u003e 20,\n    ]\n]);\n```\n\n#### 2-How can I use that ?\n\n```php\nimport(\"@core/hooks/useValidator\");\n\n\n# Usage\n$schema = \"post\",\n\n$post = [\n    \"id\" =\u003e 1,\n    \"title\" =\u003e \"Thanks for using the Micro Framework.\",\n];\n\n$isValid = useValidator($schema, $post);\n```\n\n\u003cbr/\u003e\n\n## **Cli**\nThese are list of commands that can be done works to develop your application! \n```bash\n\u003e php cli\n\n\n░░      ░░ ░░░░░░░░ ░░░░░░░     ░░░░░░  ░░   ░░ ░░░░░░\n▒▒      ▒▒    ▒▒    ▒▒          ▒▒   ▒▒ ▒▒   ▒▒ ▒▒   ▒▒\n▒▒      ▒▒    ▒▒    ▒▒▒▒▒       ▒▒▒▒▒▒  ▒▒▒▒▒▒▒ ▒▒▒▒▒▒\n▓▓      ▓▓    ▓▓    ▓▓          ▓▓      ▓▓   ▓▓ ▓▓\n███████ ██    ██    ███████     ██      ██   ██ ██\n\n                    Micro PHP Framework\n\n                        Welcome 🎉\n```\n![carbon (2)](https://github.com/user-attachments/assets/4979f1ff-552f-44f2-820b-7541a3350b4e)\n![carbon (1)](https://github.com/user-attachments/assets/17b7c886-05f8-4a95-afa7-6756c2a79a97)\n![carbon (3)](https://github.com/user-attachments/assets/be1f3b8b-a880-4cc4-8a84-d390a6cd3ccd)\n\n\n\n\u003cbr/\u003e\n\n## **Template Engine**\n\u003e Provides to work as **professional** with templates instead of using usual php template engine !\n\n### Examples :\n\u003e **Before** - views/user.php\n```php\n\u003c?php foreach ($users as $user): ?\u003e\n    \u003cdiv class=\"user-card\"\u003e\n        \u003cspan\u003eID: \u003c?php echo $user['id'] ?\u003e \u003c/span\u003e\n        \u003ch3\u003eName: \u003c?php echo $user['name'] ?\u003e \u003c/h3\u003e\n        \u003cp\u003eCV: \u003c?php echo $user['cv'] ?\u003e \u003c/p\u003e\n    \u003c/div\u003e\n\u003c?php endforeach; ?\u003e\n```\n\n\u003e **After** - views/user.hbs\n```hbs\n@foreach ($users as $user)\n    \u003cdiv class=\"user-card\"\u003e\n        \u003cspan\u003eID: {{ $user['id'] }} \u003c/span\u003e\n        \u003ch3\u003eName: {{ $user['name'] }} \u003c/h3\u003e\n        \u003cp\u003eCV: {{ $user['cv'] }} \u003c/p\u003e\n    \u003c/div\u003e\n@endforeach\n```\n\u003e NOTE:  We want to work it as professional with customized **.hbs** template engine and we don't have this like JS lib ( handlebars ) template engine and you should know about it that we have a customized template engine !\n\n\n### Syntaxes\n```bash\n{{ $variable }} # to Protect XSS attack \n{{{ $variable }}} # Not to Protect XSS attack\n{{!-- comment message --}} # Writing Comment\n```\n\n\n### Directives\n\n\u003e Condition\n```bash\n# Directives\n@if(expression)\n@elseif\n@else\n@endif\n```\n\n```hbs\n{{!-- Example --}}\n@if ($role == 'manager')\n    \u003ch3\u003eWelcome Manager\u003c/h3\u003e\n@elseif ($role == 'admin')\n    \u003ch3\u003eWelcome Admin\u003c/h3\u003e\n@else\n    \u003ch3\u003eThe Role is not valid!\u003c/h3\u003e\n@endif\n```\n\n\n\u003e Loop\n```bash\n# Directives\n@foreach(expression)\n@endforeach\n\n@while(expression)\n@endwhile\n\n@break(expression)\n@continue(expression)\n```\n\n```hbs\n{{!-- Example-1 --}}\n@foreach($users as $user)\n    \u003cdiv\u003e\n        \u003ch3\u003eName: {{ $user['name'] }} \u003c/h3\u003e\n        \u003cp\u003eEmail: {{ $user['email'] }} \u003c/p\u003e\n    \u003c/div\u003e\n@endforeach\n\n\n{{!-- Example-2 --}}\n@while($count \u003c 100)\n    \u003cp\u003eCount: {{ $count }}\u003c/p\u003e\n\n    @countinue($count \u003c 10)\n\n    @break($count == 90)\n\n    $count++;\n@endwhile\n```\n\n\u003e Partial\n```bash\n# Directives\n@include(partialPath)\n```\n\n```hbs\n{{!-- Example --}}\n@include(\"includes.header\") # include views/includes/header.hbs\n    \u003ch1\u003eWelcome Page\u003c/h1\u003e\n@include(\"includes.footer\") # include views/includes/footer.hbs\n```\n\n\u003e Script\n```bash\n# Directives\n@style\n@endstyle\n@linkStyle\n\n@script\n@endScript\n@linkScript\n\n@php\n@endphp\n\n@dump\n\n@dd\n```\n\n```hbs\n{{!-- Example-1 --}}\n@style\n* {\n    box-sizing: border-box;\n    color : #e5e5e5;\n}\n@endStyle\n\n@linkStyle(\"https://domain.com/bootstrap/styles/grid.min.css\")\n\n\n{{!-- Example-2 --}}\n@script\n    const username = promt('Enter your userName:')\n\n    alert(username)\n@endscript\n\n\n@linkScript(\"https://domain.com/jquery/jquery.min.css\")\n\n\n{{!-- Example-3 --}}\n@php\n    $message = \"Welcome to Lite PHP\"\n\n    echo $message;\n@endphp\n\n\n{{!-- Example-4 --}}\n@dump($message, true, [])\n\n@dd([1,2,3,4,5])\n```\n\n\u003e Validation\n```bash\n# Directives\n@isset(expression)\n@endisset\n\n@empty(expression)\n@endempty\n\n@flash(flash)\n@endflash\n```\n\n```hbs\n{{!-- Example-1 --}}\n@isset($user['isCheckedRole'])\n    \u003cp\u003eUser role is checked\u003c/p\u003e\n@endisset\n\n\n{{!-- Example-2 --}}\n@empty($posts)\n    \u003cp\u003eHere we don't have any posts!\u003c/p\u003e\n@endempty\n```\n\n\u003e CSRF token to protect attacks\n```bash\n# Directive\n@csrf\n```\n\n```hbs\n\u003cform\u003e\n    @csrf\n\n    \u003cinput type=\"text\" name=\"username\" /\u003e\n    \u003cinput type=\"password\" name=\"password\" /\u003e\n\n    \u003cbutton\u003eLogin\u003c/button\u003e\n\u003c/form\u003e\n```\n\n\u003e Auth\n```bash\n# Directives\n@auth\n@endauth\n\n@authRole\n@endauthRole\n\n@guest\n@endguest\n```\n\n```hbs\n{{!-- Example-1 --}}\n@auth\n    \u003ca href=\"...\"\u003eDashboard Panel\u003c/a\u003e\n@endauth\n\n{{!-- Example-2 --}}\n@authRole(\"admin\")\n    \u003ca href=\"...\"\u003eAdmin Dashboard\u003c/a\u003e\n@endauthRole\n\n\n{{!-- Example-3 --}}\n@guest\n    \u003ca href=\"...\"\u003eLogin\u003c/a\u003e\n    \u003ca href=\"...\"\u003eRegister\u003c/a\u003e\n@endguest\n```\n\n\n\u003cbr/\u003e\n\n## **Helpers**\n\n### import\n\u003e Loads file by Alias\n\n```php\nimport(\"@modules/user/_controller\")\n\n\n$user = getUser();\n\nprint_r($user);\n```\n\n### Route\n\u003e Adds new Route in a module\n\nNote: You can use it by two ways: \u003cbr\u003e\n\n\u003e 1. Add Single Route\n\n\u003e 2. Group Routes\n\n\u003e 3. Sign Route\n\n```php\n# Usage\nimport(\"@core/helpers/route\");\n\n\n# Single Route\naddRoute(\"GET\", \"/user\", \"showUser\"); # /user\n\n\n# Group Route\ngroupRoute(\"/page\", function() {\n    addRoute(\"GET\", \"/\", \"__app__index\"); # /page/home\n    addRoute(\"GET\", \"/users\", \"__user__index\"); # /page/users\n    addRoute(\"GET\", \"/courses\", \"__course__index\"); # /page/courses\n});\n\n# Sign Route\n$secretKey = \"...\";\n\n$route = addSignedRoute(\"/admin?pid=fk921\", $secretKey, ....);\n```\n\n### DD\n\u003e Dumps and dies an Array in browser\n\n\u003e Note : You don't need to load the helper, Because the helper has loaded ! \n\n```php\n$user = [\n    \"id\" =\u003e 1,\n    \"name\" =\u003e \"Robert\",\n    \"skills\" =\u003e [\"PHP\", ...]\n];\n\n# Usage\ndd($user); # to dump and die\n\ndd($user, false); # just to dump and no die process\n```\n\n### Parse\n\u003e Gets file content\n\n```php\nimport(\"@core/helpers/parse\");\n\n$file = \"links.txt\";\n\n# Usage\n$links = prase($file);\n$links = @prase($file); # use the @ to get boolean or content if you don't want to get error\n\nforach ($links as $link) {\n    echo \"[Link] {$link}\" . PHP_EOL;\n}\n```\n\n### View\n\u003e Renders view template\n\n```php\nimport(\"@core/helpers/view\");\n\n# Example 1\nview(\"welcome\");\n\n# Example 2\n$user = [\n    \"id\" =\u003e 267\n    \"title\" =\u003e \"User Page\",\n    \"name\" =\u003e \"Robert\",\n]\n\nview(\"user\", $user);\n```\n\n### Command\n\u003e Adds new Command to use in console\n\nNote: You can use it by two ways: \u003cbr\u003e\n\n\u003e 1. Add Single Command\n\n\u003e 2. Group Commands\n\n```php\n# Usage\nimport(\"@core/helpers/command\");\n\n\n# Single Command\naddCommand(\"database\", fn() =\u003e \"Hi from Lite PHP\", \"Database status\"); # php cli database\n\n\n# Group Command\ngroupCommand(\"fake:\", function() {\n    addCommand(\"city\", \"action\", \"description\"); # php cli fake:city\n    addCommand(\"company\", \"action\", \"description\"); # php cli fake:company\n    addCommand(\"user\", \"action\", \"description\"); # php cli fake:user\n    addCommand(\"book\", \"action\", \"description\"); # php cli fake:book\n});\n```\n\n### Test\n\u003e Tests module\n\nNote: You can test by two ways: \u003cbr\u003e\n\n\u003e 1. Test single module by name\n\n\u003e 2. Test all modules\n\n```php\n# Usage\nimport(\"@core/helpers/test\");\n\n\n# Definition\ndescribe('test-info', function() {\n    it(\"test-description\", function() {\n        # use Asserts ...\n        # Read \"core/helpers/assertion.php\" to use in this logic code !\n    });\n});\n\n\n# Usage\n\n    # Test All Modules \n    php cli test\n    \n    # Test Single Module \n    php cli test [module-name]\n```\n\n### Abort\n\u003e Throw HTTP error as Rendered page to show Error message\n\n```php\nimport(\"@core/helpers/abort\");\n\n\n# Usage\nfunction bootstrap() {\n    abort(500, \"Internal Server Error\", [\"package\" =\u003e \"LITE PHP\"]);\n}\n```\n\n### Build\n\u003e Builds new path \u0026 URL\n\n```php\nimport(\"@core/helpers/build\");\n\n# Guide\nbuildURL(\"/products\"); # [pre defined =\u003e (host:port)] + route\n\n\nbuildPath(\"/resources\", \"/lang/en/public\"); # base path + path + file ext\n```\n\n### Translate\n\u003e Translates content\n\n```php\nimport(\"@core/helpers/translate\");\n\n# Text: Welcome message\n\"Translated: \" . __(\"welcome\");  # پیام خوش آمد گویی\n\n# Text: Thanks :name for using :product\n\"Translated: \" . __(\"introduce\", [\n    \"name\" =\u003e \"رابرت\", \n    \"product\" =\u003e \"This package\"\n    ]);  # ممنون رابرت برای استفاده کردن از این پکیج\n\n```\n\n### URL\n\u003e Provides to use helper functions for URL, Route and ...\n\n```php\nimport(\"@core/helpers/url\");\n\n\n# Get base URL\nbaseURL(); # Http://localhost:5000\n\n# Get current route\nurl(); # /product/257\n\n# Get current url\norigin(); # Http://localhost:5000/product/257\n\n# Build pointer Route to redirect to another route \ntoRoute(\"/users\"); # Http://localhost:5000/users\n\n# Bind route by name\naddRoute(\"GET\", \"/dashboard/admin/page/users\", \"__admin_user__edit\", name: \"user\")\n\nroute(\"users\") # \"/dashboard/admin/page/users\"\n```\n\n### Assets\n\u003e Provides to use helper functions for Asset files\n\n```php\nimport(\"@core/helpers/assets\");\n\n# Get asset path\nasset(\"/css/grid.css\"); # resources/assets/css/grid.css\n\n# CSS asset path\nasset(\"/css/grid.css\"); # resources/assets/css/grid.css\ncss(\"grid\"); # resources/assets/css/grid.css\n\n# JS asset path\nasset(\"/js/state.js\"); # resources/assets/js/state.js\njs(\"state\"); # resources/assets/js/state.js\n\n# Image asset path\nimg(\"user.jpeg\"); # resources/assets/img/user.jpeg\n\n# Icon asset path\nicon(\"logo.svg\"); # resources/assets/img/logo.svg\n```\n\n### Validator\n\u003e Provides to validate data\n\n```php\nimport(\"@core/helpers/validator\");\n\n# Email validation\n$email_1 = \"Robert@gmail.com\";\n$email_2 = \"Kevin@yahoo.com\";\n\nisEmail($email_1); # true\nisEmail($email_2); # false\n\n\n# URL validation\n$url_1 = \"http://localhost:5000\";\n$url_2 = \"/categories/mobile/54673124\";\n\nisURL($url_1); # true\nisURL($url_2); # false\n\n\n# Signed route validation\n$route = \"/dashboard?pid=019231\";\n$secretKey = \"...\";\n\n$isValidSignedRoute = validateSignedRoute($route, $secretKey);\n```\n\n### Assert\n\u003e Provides to assert data in **unit test**\n\n* Note: You must use it when you are writing tests that exists in every modules of app with **_test.php** file! \n\n* If you like to use more asserts, you should move to **\"core/helpers/assert.php\"** file  \n\n```php\nimport(\"@core/helpers/asserts\");\n\n\nassertTrue(\"\"); # false\nassertTrue(\"This is a message\"); # true\nassertTrue(0); # false\nassertTrue(1); # true\n\n\nassertEmpty([]) # true\nassertEmpty([1,2,3]) # false\n\n# and more assert functions....\n```\n\n\u003cbr /\u003e\n\n## **Hooks**\n\n\u003e Note: You should use hooks in logic code and don't use that outer of logic code!\n\n\u003cbr /\u003e\n\n### UseHTTP\n\u003e Provides to use http as **$_SERVER** super global\n\n```php\nimport(\"@core/hooks/useHTTP\");\n\n\nfunction inspectRequest() {\n    $method = useHTTP(\"REQUEST_METHOD\");\n\n    echo $method; # GET, POST, PUT, PATCH, DELETE\n}\n```\n\n### UseGET\n\u003e Provides to use **$_GET** super global\n\n```php\nimport(\"@core/hooks/useGET\");\n\n\nfunction inspectRequest() {\n    $username = useGET(\"username\");\n    $password = useGET(\"password\");\n\n\n    dd([\n        \"username\" =\u003e $username,\n        \"password\" =\u003e $password\n    ]);\n}\n```\n\n### UsePOST\n\u003e Provides to use **$_POST** super global\n\n```php\nimport(\"@core/hooks/usePOST\");\n\n\nfunction inspectRequest() {\n    $token = usePOST(\"token\");\n\n    echo $token;\n}\n```\n\n### UseFetch\n\u003e Provides to send http request\n\n### Examples :\n\n```php\n# Send GET Request\nimport(\"@core/hooks/useFetch\");\n\n$response = useFetch(\"http://domain.com/end-point\");\n\n\ndd($response);\n```\n\n```php\n# Send POST Request\nimport(\"@core/hooks/useFetch\");\n\n\n$params = [\n    \"method\" =\u003e \"POST\",\n    \"body\" =\u003e [],\n    \"headers\" =\u003e [],\n];\n\n$response = useFetch(\"http://domain.com/end-point\", $params);\n\n\ndd($response);\n```\n\n```php\n# Send PUT Request\nimport(\"@core/hooks/useFetch\");\n\n\n$params = [\n    \"method\" =\u003e \"PUT\",\n    \"body\" =\u003e [],\n    \"headers\" =\u003e [],\n];\n\n$response = useFetch(\"http://domain.com/end-point\", $params);\n\n\ndd($response);\n```\n\n```php\n# Send PATCH Request\nimport(\"@core/hooks/useFetch\");\n\n\n$params = [\n    \"method\" =\u003e \"PATCH\",\n    \"body\" =\u003e [],\n    \"headers\" =\u003e [],\n];\n\n$response = useFetch(\"http://domain.com/end-point\", $params);\n\n\ndd($response);\n```\n\n```php\n# Send DELETE Request\nimport(\"@core/hooks/useFetch\");\n\n\n$params = [\n    \"method\" =\u003e \"DELETE\",\n    \"body\" =\u003e [],\n    \"headers\" =\u003e [],\n];\n\n$response = useFetch(\"http://domain.com/end-point\", $params);\n\n\ndd($response);\n```\n\n### UseID\n\u003e Provides to get random number ID\n\n```php\nimport(\"@core/hooks/useID\");\n\n\nfunction createUser($name, $email, $passowrd) {\n    $id = useID();\n\n    # logic code ...\n}\n```\n\n### UseConfig\n\u003e Provides to get Config by key\n\n\u003eNote: Sometimes you don't want to get error for getting value from the hook usage, First you should load target module configuration in current file or script !\n\n```php\nimport(\"@core/hooks/useConfig\");\n\n\nfunction createUser($name, $email, $passowrd) {\n    $applicationName = useConfig(\"app.name\");\n\n    # logic code ...\n}\n```\n\n### UseEnum\n\u003e Provides to get Enum by key\n\n\u003e Note: sometimes you dont' want to get error for getting value from the hook usage, First you should load target module configuration in current file or script !\n\n```php\nimport(\"@core/hooks/useEnum\");\n\n\nfunction createUser($name, $email, $passowrd) {\n    # User SQL Table\n    $userTable = useEnum(\"User::TABLE\");\n    \n    # HTTP Statuses\n    $HTTP_200 = useEnum(\"HTTP::OK\");\n    $HTTP_201 = useEnum(\"HTTP::SUCCESS\");\n    $HTTP_400 = useEnum(\"HTTP::BAD\");\n    \n    # logic code ...\n}\n```\n\n\n### UseState\n\u003e Provides to define state in **container** as **$GLOBALS['container']** super global\n\nNote: The hook has more option that you will like that\n\n\u003e 1. Define state as \"value\"\n\n\u003e 2. Define state as \"key\" \u0026 \"value\"\n\n\u003e 3. Define state as \"key\" (Nested) \u0026 \"value\"\n\n\n```php\nimport(\"@core/hooks/useState\");\n\n\nfunction createUser($id, $name, $email, $password) {\n    $user = [\n        \"email\" =\u003e $email,\n        \"password\" =\u003e $password\n    ];\n\n\n    # First way =\u003e key \u0026 value\n    useState(\"users\", $user);\n    \n    # Second way =\u003e nested keys \u0026 value\n    useState(\"users.{$name}\", $user);\n    \n    # Third way =\u003e nested keys \u0026 value\n    useState(\"users.{$id}.{$name}\", $user);\n\n\n    # logic code ...\n}\n```\n\n### UseGlobal\n\u003e Provides to get value from **container** as **$GLOBALS['container']** super global\n\n```php\nimport(\"@core/hooks/useGlobal\");\n\n\nfunction getPlugins() {\n    # First way =\u003e without nested key\n    $plugins = useGlobal(\"plugins\"); # $GLOBALS['container']['plugins']\n    \n    # Second way =\u003e with nested keys\n    $runnerPlugins = useGlobal(\"plugins.runner\"); # $GLOBALS['container']['plugins']['runner']\n    \n    $usagePlugins = useGlobal(\"plugins.usage\"); # $GLOBALS['container']['plugins']['usage']\n\n\n    # logic code ...\n}\n```\n\n\n\n### UseHash\n\u003e Provides to hash password\n\n```php\nimport(\"@core/hooks/useHash\");\n\n\nfunction createUser($name, $email, $passowrd) {\n    $hashedPassword = useHash($password);\n\n    # logic code ...\n}\n```\n\n### UseVerifyPassword\n\u003e Provides to verify hashed password\n\n```php\nimport(\"@core/hooks/useVerifyPassword\");\n\n\nfunction checkPassword($password,  $hashedPassowrd) {\n    $isValidPassword = useVerifyPassword($password, $hashedPassword);\n\n    # logic code ...\n}\n```\n\n### UseHTML\n\u003e Provides to get html content by url\n\n```php\nimport(\"@core/hooks/useHTML\");\n\n\nfunction getSiteHtmlContent($url) {\n    $html = useHTML($url);\n\n    # logic code ...\n}\n```\n\n### UseMode\n\u003e Provides to get current app mode from \".env\" as APP_MODE **( Production | Development )**\n\n```php\nimport(\"@core/hooks/useMode\");\n\n\nfunction getApplicationModeStatus() {\n    $mode = useMode(); # Production | Development\n\n    # logic code ...\n}\n```\n\n### UseEnv\n\u003e Provides to get env from \".env\" by key\n\n```php\nimport(\"@core/hooks/useEnv\");\n\n\nfunction createDatabaseConnection() {\n    $db = useEnv(\"DATABASE_DB\");\n    $host = useEnv(\"DATABASE_HOST\");\n    $username = useEnv(\"DATABASE_USER\");\n    $password = useEnv(\"DATABASE_PASS\");\n\n    # logic code ...\n}\n```\n\n### UseLog\n\u003e Provides to put log message\n\n```php\nimport(\"@core/hooks/useLog\");\n\n\nfunction showDashboardPage() {\n    useLog(\"Admin Logged in!\");\n\n    # logic code ...\n}\n```\n\n### UsePlugin\n\u003e Provides to use plugins that has **usage type**\n\n```php\nimport(\"@core/hooks/usePlugin\");\n\n\nfunction getShortLink($longURL) {\n    [...] = usePlugin(\"shortLink\");\n\n    # logic code ...\n}\n```\n\n### UseQuery\n\u003e Provides to run **SQL query**\n\n```php\nimport(\"@core/hooks/useQuery\");\n\n\nfunction createUser($name, $email, $passowrd) {\n    useQuery(\"INSERT INTO `users` (name, email, password) VALUES (?, ?, ?)\", [$name, $email, $passowrd]);\n    \n    # logic code ...\n}\n\nfunction doLogin($email, $passowrd) {\n    $user = useQuery(\"SELECT * FROM `users` WHERE email = ?\", [$email]);\n\n    dd($user);\n    # logic code ...\n}\n```\n\n### UseResponse\n\u003e Provides to return content output to the response as JSON | HTML | TEXT\n\n\u003e Note : You don't need to set content-type in header, Because the hook has done it \n\n* @Reference : core/hooks/useType \u003cbr\u003e\n* @Reference : core/hooks/useResponse\n\n```php\nimport(\"@core/hooks/useResponse\");\n\n\nfunction showLoginPage() {\n    $form = \"\n        \u003cform action='' method='POST'\u003e\n            \u003cinput type='email' name='email' /\u003e\n            \u003cinput type='password' name='password' /\u003e\n            \u003cbutton type='submit'\u003eLogin\u003c/button\u003e\n        \u003c/form\u003e\n    \";\n    \n    return useResponse(\"html\", $form);\n}\n```\n\n### UseRequest\n\u003e Provides the request data\n\n```php\nimport(\"@core/hooks/useRequest\");\n\n\nfunction inspectRequest() {\n    $host = useRequest(\"host\"); # site.com\n    $ip = useRequest(\"ip\"); # 192.168.1.1\n    $method = useRequest(\"method\"); # GET | POST | PUT | PATCH | DELETE\n    $protocol = useRequest(\"protocol\"); # HTTP | HTTPS\n    $query = useRequest(\"query\"); # LIKE /product/?category='mobile'\u0026limit=10\n    $route = useRequest(\"route\"); # /products\n    $routeParams = useRequest(\"params\"); # /product/{id} =\u003e [\"id\" =\u003e 171]\n    $userAgent = useRequest(\"userAgent\"); # ...\n\n\n    # logic code ...\n}\n```\n\n### UseRedirect\n\u003e Provides to redirect to a route\n\n```php\nimport(\"@core/hooks/useRedirect\");\n\n\nfunction inspectRequest() {\n    $isValidUser = true;\n\n    if($isValidUser) {\n        useRedirect(\"/dashboard\");\n    }\n\n    # logic code ...\n}\n```\n\n### UseURL\n\u003e Provides to parse URL\n\n```php\nimport(\"@core/hooks/useURL\");\n\n\nfunction inspectRequest() {\n    $parsedURL = useURL(\"http://localhost:5000/api/v1/products/?limit=25\");\n\n    dd($parsedURL);\n    # logic code ...\n}\n```\n\n### UseBody\n\u003e Provides to get the request body data\n\n```php\nimport(\"@core/hooks/useBody\");\n\n\nfunction inspectRequest() {\n    $token = useBody(\"token\");\n\n    # logic code ...\n}\n```\n\n### UseHeader\n\u003e Provides to add \u0026 remove header by **key and value**\n\n```php\nimport(\"@core/hooks/useHeader\");\n\n\nfunction inspectRequest() {\n    $fakeUserAgent = \"...\";\n\n    # add\n    useHeader(\"HTTP_USER_AGENT\", $fakeUserAgent);\n    \n    # remove\n    useHeader(\"X-Powered-By\");\n\n\n    # logic code ...\n}\n```\n\n### UseMatch\n\u003e Provides to use regex\n\n```php\nimport(\"@core/hooks/useMatch\");\n\n\nfunction isValidEmail($email) {\n    $regexPattern = \"/^\\w+@gmail.com$/\";\n\n    $result = useMatch($regexPattern, $email);\n\n    dd($result);\n\n    # logic code ...\n}\n```\n\n### UseFlash\n\u003e Provides to add \u0026 remove falsh message\n\n```php\nimport(\"@core/hooks/useFlash\");\n\n\nfunction doLogin() {\n    useFlash(\"login\", \"Invalid Email or Password!\");\n    \n    # logic code ...\n}\n```\n\n### useFile\n\u003e Provides to get file from $_FILES\n\n```php\nimport(\"@core/hooks/useFile\");\n\n\nfunction addProfile() {\n    $profile = useFile(\"profile\");\n\n    # logic code ...\n}\n```\n\n### useUpload\n\u003e Provides to upload file in local stroage\n\n```php\nimport(\"@core/hooks/useFile\");\nimport(\"@core/hooks/useUpload\");\n\n\nfunction uploadProfile() {\n    $profile = useFile(\"profile\");\n\n    $result = useUpload($profile);\n\n    # logic code ...\n}\n```\n\n### useCache\n\u003e Provides to cache data\n\n```php\nimport(\"@core/hooks/useCache\");\n\n\n# Cache Data\nfunction cachePostsData() {\n    $posts = [...];\n\n    useCache(\"posts\", $posts);\n    # logic code ...\n}\n\n# Get cached data\nfunction getCachedPostsData() {\n    $posts = useCache(\"posts\");\n    \n    # logic code ...\n}\n```\n\n### useCookie\n\u003e Provides to use cookie in process of app\n\n```php\nimport(\"@core/hooks/useCookie\");\n\n\n# Set cookie\nuseCookie(\"darkMode\", true);\n\n# Get the cookie\n$darkModeState = useCookie(\"darkMode\"); # true\n\n# Set cookie params\nuseCookie(\"darkMode\", rand(), [\n    \"expireTime\" =\u003e \"\",\n    \"path\" =\u003e \"\",\n    \"domain\" =\u003e \"\",\n    \"secure\" =\u003e \"\",\n    \"httpOnly\" =\u003e \"\"\n]);\n```\n\n### useSession\n\u003e Provides to use session in process of app\n\n```php\nimport(\"@core/hooks/useSession\");\n\n\n# Set session\nuseSession(\"isLoggedIn\", true);\n\n# Get the session\n$loginState = useSession(\"isLoggedIn\"); # true\n\n# Get list of all sessions\n$sessions = useSession();\n```\n\n### UseToken\n\u003e Provides to generate new token\n\n```php\nimport(\"@core/hooks/useToken\");\n\n\nfunction doLogin() {\n    $user = [\n        \"username\" =\u003e \"Robert\",\n        \"password\" =\u003e 12345\n    ];\n\n\n    $token = useToken($user, \"secretKey\");\n\n\n    # logic code ...\n}\n```\n\n### UseVerifyToken\n\u003e Provides to verify token\n\n```php\nimport(\"@core/hooks/useVerifyToken\");\n\n\nfunction exportLogs() {\n    $token = \"...\";\n\n    $isValidUser = useVerifyToken($token,\"secretKey\");\n\n\n    # logic code ...\n}\n```\n\n### useValidator\n\u003e Provides to validate input data\n\n```php\nimport(\"@core/hooks/useValidator\");\n\n\nfunction validatePost() {\n    $schema = \"post\";\n\n    $post = [\n        \"id\" =\u003e 1,\n        \"title\" =\u003e \"What is LITE PHP?\",\n        \"body\" =\u003e \"Micro PHP Freamework!\"\n    ];\n\n    $isValid = useValidator($schema, $post);\n\n    # logic code ...\n}\n```\n\n### useAction\n\u003e Provides to save action in local database\n\n```php\nimport(\"@core/hooks/useAction\");\n\n\nfunction addTodo() {\n    useAction(\"ADD_TODO\");\n\n    $todo = [\n        \"id\" =\u003e rand(),\n        \"title\" =\u003e \"Done login page\",\n        \"timestamp\" =\u003e time()\n    ];\n    \n    # logic code ...\n}\n```\n\n### useRecord\n\u003e Provides to save data in local database\n\n```php\nimport(\"@core/hooks/useRecord\");\n\n\nfunction addTodo() {\n    $todo = [\n        \"id\" =\u003e rand(),\n        \"timestamp\" =\u003e time()\n    ];\n\n    useRecord(\"todos\", $todo[\"title\"], $todo[\"timestamp\"]);\n\n    # logic code ...\n}\n```\n\n### useTable\n\u003e Provides to get \u0026 delete data in local database\n\n#### 1-Getting data:\n\n```php\nimport(\"@core/hooks/useTable\");\n\n\nfunction getTimestamp() {\n    $result = useTable('actions', 'NEW_TASK');\n\n    # Logic code ...\n}\n```\n\n#### 2-Deleteing data:\n\n```php\nimport(\"@core/hooks/useTable\");\n\n\nfunction deleteAction() {\n    $result = useTable('actions', 'NEW_TASK', $action = TABLE_DELETE_ACTION);\n\n    # Logic code ...\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farefshojaei%2Flite-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farefshojaei%2Flite-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farefshojaei%2Flite-php/lists"}