{"id":20706137,"url":"https://github.com/arikato111/nexit","last_synced_at":"2025-03-11T05:17:31.685Z","repository":{"id":41283048,"uuid":"508998002","full_name":"Arikato111/NEXIT","owner":"Arikato111","description":"Template for PHP with nexit library to make better for path","archived":false,"fork":false,"pushed_at":"2023-08-01T05:23:55.000Z","size":99,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"Release2.1","last_synced_at":"2025-01-17T20:22:14.937Z","etag":null,"topics":["framework","php","router","template"],"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/Arikato111.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":"2022-06-30T08:34:42.000Z","updated_at":"2023-02-14T14:46:43.000Z","dependencies_parsed_at":"2025-01-17T20:21:07.417Z","dependency_job_id":"a52f1c55-ad0a-49ec-8f41-808faa298007","html_url":"https://github.com/Arikato111/NEXIT","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Arikato111%2FNEXIT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Arikato111%2FNEXIT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Arikato111%2FNEXIT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Arikato111%2FNEXIT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Arikato111","download_url":"https://codeload.github.com/Arikato111/NEXIT/tar.gz/refs/heads/Release2.1","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242973983,"owners_count":20215251,"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","php","router","template"],"created_at":"2024-11-17T01:21:38.543Z","updated_at":"2025-03-11T05:17:31.663Z","avatar_url":"https://github.com/Arikato111.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# NEXIT\n\n## Writing Multi-page as Function\n\n### 2.1 version ( Release )\n\n--- \n### What's new !\n\n- ใน **v2.1** ปรับปรุงให้รองรับการทำ api\n\n- ### ปรับปรุงและพัฒนาการ `require` ให้มาใช้ `import` แทน ซึ่งจะสามารถใช้ได้กับทั้ง หน้าเว็บฟังค์ชั่น และ module \n- ### พัฒนาการเขียนหน้าเว็บในรูปแบบฟังค์ชั่น และ เพิ่มการ export\n\n---\nMenu\n\n[NEXIT คืออะไร](#nexit-คืออะไร)\n\n[ติดตั้ง](#ติดตั้ง)\n\n[การเขียนหน้าเว็บในรูปแบบฟังค์ชั่น](#การเขียนหน้าเว็บในรูปแบบฟังค์ชั่น)\n\n[modules](#modules)\n\n[โฟลเดอร์ pages](#โฟลเดอร์-pages)\n\n[dynamic path](#dynamic-path)\n\n[_](#_)\n\n[_app.php](#_app.php)\n\n[_error.php](#_error.php)\n\n[โฟลเดอร์ public](#โฟลเดอร์-public)\n\n[โฟลเดอร์ static](#โฟลเดอร์-static)\n\n[api](#api)\n\n---\n### NEXIT คืออะไร\n- จากโปรเจค [PHP_SPA](https://github.com/Arikato111/PHP_SPA) ที่ได้มีการเขียนในรูปแบบฟังค์ชั่น ซึ่งต้องมาคอยกำหนด path ด้วยตัวเอง ซึ่งอาจจะทำให้ซับซ้อนขึ้นมาพอสมควรและต้องปรับรูปแบบการเขียนไปจากเดิมมาก ก็เลยได้มีการสร้างโปรเจคนี้ขึ้น ซึ่งจะทำให้สามารถเขียนแยกหน้าได้เหมือนเดิม และยังสามารถเขียนแบบฟังค์ชั่นได้อีกด้วย ถือเป็นการผสมผสานกันอย่างพอเหมาะพอดี \n  \n- NEXIT คือการเขียนในรูปแบบแยกหน้าการทำงาน คล้ายกับการเขียนแบบปกติ เพียงแต่การเขียนหน้าต่างๆ จะเป็นในรูปแบบ function และสามารถทำงานร่วมกับ modules อื่นๆ ได้\n---\n### การเขียนหน้าเว็บในรูปแบบฟังค์ชั่น\n- การเขียนแต่ละหน้าจะเปลี่ยนไปเป็นการเขียนเป็นในรูปแบบ function แทนการเขียนแยกเป็นหน้าๆ ตามปกติ\n- ตัวอย่างการเขียน และ อธิบายองค์ประกอบต่างๆ\n\n```php\n\u003c?php\n$title = import('wisit-router/title');\n\n$Home = function () use ($title) {\n  $title('Home');\n  return \u003c\u003c\u003cHTML\n    \u003cdiv\u003e\n      \u003cdiv\u003eHello world\u003c/div\u003e\n    \u003c/div\u003e\n    HTML;\n};\n\n$export = $Home;\n```\n- `$title = import('wisit-router/title');`\n  - ส่วนแรกคือการ `import` module  เข้ามาใช้งาน ซึ่งจะอธิบายโดยละเอียดในหัวข้อ `import`\n- `$Home` และ `use` \n  - อย่างที่ได้กล่าวไปว่าเป็นการเขียนในรูปแบบฟังค์ชั่น และ `$Home` ก็เป็นฟังค์ชั่นๆ หนึ่งที่จะ return ค่าไปแสดงผลเป็น HTML โดยมีการใช้ `$export` เพื่อส่งค่าต่อไปเมื่อถูก import ซึ่งนอกจากฟังค์ชั่น $Home แล้วก็สามารถสร้างฟังค์ชั่นอื่นๆ มาทำงานร่วมกันได้แต่อย่างไรก็ตาม จะ ` $export` ได้เพียงฟังค์ชั่นเดียว \n  - เมื่อมีพังค์ชั่นอื่นหรือ modules อื่นที่ import เข้ามาแล้วต้องการให้มาทำงานภายในฟังค์ชั่นที่ต้องการ สามารถใช้ `use ()` ได้ และใส่ตัวแปรที่ต้องการให้ทำงานภายในฟังค์ชั่นลงไป\n  - **ข้อควรระวังสำหรับการสร้างฟังค์ชั่น ไม่ควรประกาศฟังค์ชั่นที่เป็นสถานะ Global ( ฟังค์ชั่นตามแบบปกติ) แนะนำให้ประกาศลงในตัวแปรเท่านั้น เพื่อป้องกัน error ในกรณีมีการ import ซ้ำ\n  - `$export` เพื่อจะทำงานร่วมกับไฟล์หรือฟังค์ชั่นอื่นๆ การ export มีไว้เพื่อส่งค่าๆ นั้นออกไป เมื่อถูก import  เช่นในตัวอย่างที่มีการ `$export = $Home;` คือการส่ง $Home ออกไป\n\n---\n### import\n- เพื่อให้สามารถเขียนหน้าเว็บในรูปแบบฟังค์ชั่น ควรใช้ `import` แทนการ `require` ซึ่งจะมีตัวอย่างและวิธีใช้กับประเภทไฟล์ต่างๆ ดังนี้\n#### การ import modules\n- ตัวอย่าง การ import wisit-router\n```php\n['Route' =\u003e $Route] = import('wisit-router');\n```\n-  สำหรับ `modules` นั้นจะใส่เพียงชื่อของ modules ที่ต้องการเท่านั้น \n  \n-  หาก modules ที่ต้องการนั้นรองรับการ import แบบ ไฟล์ย่อยๆ ก็สามารถ import ได้ เช่น\n```php\n$title = import('wisit-router/title');\n```\n- จะสังเกตุว่าไม่ต้องใส่นามสกุลของไฟล์ (.php)\n#### การ import ไฟล์อื่นๆ รวมทั้งไฟล์เว็บแบบฟังค์ชึ่น\n - ตัวอย่าง\n```php\n$HomePage = import('./src/Home');\n```\n- จำเป็นต้องใส่ที่อยู่ไฟล์โดยอ้างอิงจาก path นอกสุดเสมอ และ จำเป็นต้องใส่ `./` หน้าสุดข้องที่อยู่ไฟล์ตามตัวอย่าง\n- และ เหมือนกับ modules เมื่อกี้คือ **ไม่ต้องใส่นามสกุลของไฟล์**\n---\n### modules\n- ในโปรเจคนี้จะมี `modules` เริ่มต้นมาให้ 3 modules คือ\n  - use-import\n  - nexit\n  - wisit-router\n- นอกจากนั้นคุณสามารถติดตั้ง `modules` อื่นๆ หรือเขียนขึ้นมาเองก็ได้ ซึ่งมีข้อกำหนดดังนี้\n  -   0 ไฟล์หลักใน  `module`  จะต้องชื่อ  `main.m.php`  เท่านั้น\n  -   1 ชื่อโฟลเดอร์ของ  `module`  คือชื่อของ  `module`\n  -  2 หากจะทำให้มีการ  `import`  ซ้ำได้ และมีตัวแปรมารับค่า ต้องเขียนภายในขอบเขตการ  `return`   ซึ่งจะ  `return`  เป็น function , variable, array, obj ก็ได้ทั้งนั้น\n- `use-import` คือ module ที่จะทำให้สามารถใช้ import แทน require ซึ่งในการเขียนนั้นจะไม่ใช้ require อีก\n- `nexit` คือใจหลักของโปรเจคนี้ ที่จะทำให้สามารถทำงานได้อย่างที่เป็นอยู่ ซึ่งจะมีการใช้งานที่หน้า `index.php`\n- `wisit-router` คือ module จาก [PHP_SPA](https://github.com/Arikato111/PHP_SPA) สามารถเข้าไปอ่านวิธีใช้เพิ่มเติมได้\n---\n### โฟลเดอร์ pages\n- การเขียนหน้าต่างๆ จะต้องมาเขียนที่ โฟลเดอร์ pages ซึ่งจะเทียบเท่า htdocs เช่น เมื่อสร้าง ไฟล์ about.php ไว้ใน pages เมื่อเข้าหน้า about.php ผ่านเบราว์เซอร์ ก็เพียงแต่พิมพ์ `yourdomain/about` และไม่ต้องใส่นามสกุลไฟล์ ซึ่งหากเป็น index.php ก็ไม่ต้องใส่ชื่อไฟล์ก็ได้ ก็จะเป็น `yourdomain`  เฉยๆ \n- ที่สำคัญห้ามนำไฟล์อื่นนอกเหนือจากหน้าเว็บไว้ที่ pages\n---\n### dynamic path\n- หากต้องการให้ โฟลเดอร์หรือไฟล์ใน pages เป็นแบบ dynamic ให้กำหนดชื่อเป็น `[]` เช่น\n  - ชื่อไฟล์ `[].php`\n  - ชื่อโฟลเดอร์ `[]`\n---\n### _\n- หากไม่ต้องการให้หน้านั้นถูกเข้าถึงให้ใส่ `_` \n- และระวังเรื่อง dynamic path ที่อาจจะมี `_` ปนอยู่\n---\n### _app.php\n- หากมีหน้าที่เป็น function และถูกเรียกใช้งาน ตัว `_app.php` จะทำการรับหน้านั้นเข้ามา แล้วค่อย return ออกไป ซึ่งสามารถเขียนส่วนอื่นๆ เพิ่มเติม เช่น navbar หรือ footer และส่วนอื่นๆ ซึ่งจะทำให้ หน้าเว็บที่เขียนแบบ function ไม่จำเป็นต้องเขียนหน้าทั้งหมด สามารถเขียนเพียงบางส่วนของเว็บไซต์ได้\n- ห้ามเปลี่ยนชื่อไฟล์\n---\n### _error.php\n- คือหน้าที่จะแสดงผลเมื่อผู้ใช้ไม่พบหน้าที่ต้องการ ซึ่งห้ามเปลี่ยนชื่อไฟล์\n---\n### โฟลเดอร์ public\n- ตามชื่อไฟล์เลย หากคุณต้องการเก็บอะไรที่ต้องการให้คนอื่นเข้าถึง เช่นรูบภาพ ไฟล์ ก็สามารถนำมาไว้ที่นี่ได้\n- --\n### โฟลเดอร์ static\n- นี่เป็นโฟล์เดอร์สำหรับเก็บไฟล์ css , js\n- และตอนใช้งานอย่าลืม link ละ\n---\n\n### Api\n\nในเวอร์ชั่นที่ 2.1 จะมีการรองรับการทำ api ดังนี้\n\n- `./pagees/_app.php` จะมีการเรียกใช้ `useApi` ซึ่งตัว **useApi** จะทำหน้าที่กรองและคัดแยก หน้า api จากหน้าเว็บปกติ \n\n- ตัวอย่างการใช้งาน\n```php\n  $useApi('api', $Component);\n```\n- อธิบายส่วนประกอบ\n\n  \n  - 'api' คือ path ที่กำหนดไว้สำหรับ **api** หากต้องการอนุญาตทุก path ก็สามารถใช้ **'*'** ได้\n\n  - **$Component** คือ ฟังก์ชั่นของหน้าเว็บต่างๆ ที่ตัว **_app** รับค่าเข้ามา ซึ่งจะนำมาใส่ใน **useApi** เพื่อให้มันทำการสั่งรันหากตรงตามเงื่อนไข\n  - หากต้องการส่ง `props` ลงไปใน **$Component** ก็สามารถใช้ได้ดังนี้\n\n  ```php\n  $props = 'Data';\n  $useApi('api', $Component, $props); \n  ```\n- ในส่วนของการเขียน **Function** เพื่อใช้งาน **api** จะทำได้ดังตัวอย่างข้างล่าง\n\n```php\n$export = function ($req, $res) {\n    $res-\u003ejson(['msg' =\u003e 'Hello world']);\n};\n\n```\n\n- อธิบายส่วนประกอบ\n  - `$req`  จะมี type เป็น object ที่มี function ด้านใน 4 function คือ\n  - `$req-\u003eheader()` จะเป็นตัวรับค่า headers ที่ส่งมา\n\n  -  `$req-\u003ebody()` จะเป็นตัวรับค่า value ที่ส่งมาผ่าน body ซึ่งจะ return เป็นข้อมูลที่ส่งมา\n\n  -  `$req-\u003equery()` จะเป็นตัวดึงค่า url parameter และ return เป็น array ซึ่งสามารถสร้างตัวแปรปกติมารับค่าได้ แต่หากต้องการรับค่าแค่บางค่าเท่านั้น ก็สามารถเขียนแบบนี้ได้\n\n  - `['name' =\u003e $name] = $req-\u003equery();`\nตัว `name` คือชื่อตัวแปรที่ต้องการรับ และ `$name` คือตัวแปรที่มารับค่า\n  \n     -  `$req-\u003eparams()` คือการดึงค่า path ตำแหน่งสุดท้าย เช่น `/about/name` ตำแหน่งสุดท้ายก็คือ name ก็จะได้ name มา\n\n    - หรือหากต้องการระบุตำแหน่งก็สามารถใส่ตำแหน่งลงไปได้ โดยเริ่มนับตำแหน่งแรกเป็นตำแหน่งที่ 0\n\n- สำหรับตัว `$res` จะมี type เป็น object ที่มี function ด้านใน 4 function คือ\n\n- `$res-\u003eset($field, $value)` เป็นตัวที่จะส่งค่าผ่าน **header**  โดย `$field` เป็นเหมือนการตั้งชื่อ key  ส่วน `$value` ก็คือค่าที่ต้องการใส่เข้าไป เช่น\n-  - `$res-\u003eset('day', 'Mon')`\n\n-  `$res-\u003esend()` คือการส่ง response ออกไปในรูปแบบ string โดยใส่ string ธรรมดาลงไปใน function\n\n-  `$res-\u003estatus()` คือการส่งรหัสสถานะต่างๆ เช่น 404 , 200 ซึ่งจะใส่ตัวเลขรหัดลงใน function\n\n-  `$res-\u003ejson()` คือการส่ง response ออกไปในรูปแบบ json โดยใส่ PHP Array หรือ PHP Associative Arrays ลงใน function\n\n\n___\n\n\n### ติดตั้ง\n\n- ใช้ [control](https://github.com/Arikato111/control) ในการติดตั้ง\n\tใช้คำสั่ง \n\t```\n\tphp control create nexit-app\n\t```\n  \n\n- คัดลอกโค้ดไปวางไว้หน้า `index.php` แล้วรันหน้านั้น\n```\n\u003c?php\neval(file_get_contents('https://raw.githubusercontent.com/Arikato111/NEXIT/installer/Release2-0.txt'));\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farikato111%2Fnexit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farikato111%2Fnexit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farikato111%2Fnexit/lists"}