https://github.com/arikato111/nexit
Template for PHP with nexit library to make better for path
https://github.com/arikato111/nexit
framework php router template
Last synced: 3 months ago
JSON representation
Template for PHP with nexit library to make better for path
- Host: GitHub
- URL: https://github.com/arikato111/nexit
- Owner: Arikato111
- Created: 2022-06-30T08:34:42.000Z (almost 3 years ago)
- Default Branch: Release2.1
- Last Pushed: 2023-08-01T05:23:55.000Z (almost 2 years ago)
- Last Synced: 2025-01-17T20:22:14.937Z (5 months ago)
- Topics: framework, php, router, template
- Language: PHP
- Homepage:
- Size: 96.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# NEXIT
## Writing Multi-page as Function
### 2.1 version ( Release )
---
### What's new !- ใน **v2.1** ปรับปรุงให้รองรับการทำ api
- ### ปรับปรุงและพัฒนาการ `require` ให้มาใช้ `import` แทน ซึ่งจะสามารถใช้ได้กับทั้ง หน้าเว็บฟังค์ชั่น และ module
- ### พัฒนาการเขียนหน้าเว็บในรูปแบบฟังค์ชั่น และ เพิ่มการ export---
Menu[NEXIT คืออะไร](#nexit-คืออะไร)
[ติดตั้ง](#ติดตั้ง)
[การเขียนหน้าเว็บในรูปแบบฟังค์ชั่น](#การเขียนหน้าเว็บในรูปแบบฟังค์ชั่น)
[modules](#modules)
[โฟลเดอร์ pages](#โฟลเดอร์-pages)
[dynamic path](#dynamic-path)
[_](#_)
[_app.php](#_app.php)
[_error.php](#_error.php)
[โฟลเดอร์ public](#โฟลเดอร์-public)
[โฟลเดอร์ static](#โฟลเดอร์-static)
[api](#api)
---
### NEXIT คืออะไร
- จากโปรเจค [PHP_SPA](https://github.com/Arikato111/PHP_SPA) ที่ได้มีการเขียนในรูปแบบฟังค์ชั่น ซึ่งต้องมาคอยกำหนด path ด้วยตัวเอง ซึ่งอาจจะทำให้ซับซ้อนขึ้นมาพอสมควรและต้องปรับรูปแบบการเขียนไปจากเดิมมาก ก็เลยได้มีการสร้างโปรเจคนี้ขึ้น ซึ่งจะทำให้สามารถเขียนแยกหน้าได้เหมือนเดิม และยังสามารถเขียนแบบฟังค์ชั่นได้อีกด้วย ถือเป็นการผสมผสานกันอย่างพอเหมาะพอดี
- NEXIT คือการเขียนในรูปแบบแยกหน้าการทำงาน คล้ายกับการเขียนแบบปกติ เพียงแต่การเขียนหน้าต่างๆ จะเป็นในรูปแบบ function และสามารถทำงานร่วมกับ modules อื่นๆ ได้
---
### การเขียนหน้าเว็บในรูปแบบฟังค์ชั่น
- การเขียนแต่ละหน้าจะเปลี่ยนไปเป็นการเขียนเป็นในรูปแบบ function แทนการเขียนแยกเป็นหน้าๆ ตามปกติ
- ตัวอย่างการเขียน และ อธิบายองค์ประกอบต่างๆ```php
Hello world
HTML;
};$export = $Home;
```
- `$title = import('wisit-router/title');`
- ส่วนแรกคือการ `import` module เข้ามาใช้งาน ซึ่งจะอธิบายโดยละเอียดในหัวข้อ `import`
- `$Home` และ `use`
- อย่างที่ได้กล่าวไปว่าเป็นการเขียนในรูปแบบฟังค์ชั่น และ `$Home` ก็เป็นฟังค์ชั่นๆ หนึ่งที่จะ return ค่าไปแสดงผลเป็น HTML โดยมีการใช้ `$export` เพื่อส่งค่าต่อไปเมื่อถูก import ซึ่งนอกจากฟังค์ชั่น $Home แล้วก็สามารถสร้างฟังค์ชั่นอื่นๆ มาทำงานร่วมกันได้แต่อย่างไรก็ตาม จะ ` $export` ได้เพียงฟังค์ชั่นเดียว
- เมื่อมีพังค์ชั่นอื่นหรือ modules อื่นที่ import เข้ามาแล้วต้องการให้มาทำงานภายในฟังค์ชั่นที่ต้องการ สามารถใช้ `use ()` ได้ และใส่ตัวแปรที่ต้องการให้ทำงานภายในฟังค์ชั่นลงไป
- **ข้อควรระวังสำหรับการสร้างฟังค์ชั่น ไม่ควรประกาศฟังค์ชั่นที่เป็นสถานะ Global ( ฟังค์ชั่นตามแบบปกติ) แนะนำให้ประกาศลงในตัวแปรเท่านั้น เพื่อป้องกัน error ในกรณีมีการ import ซ้ำ
- `$export` เพื่อจะทำงานร่วมกับไฟล์หรือฟังค์ชั่นอื่นๆ การ export มีไว้เพื่อส่งค่าๆ นั้นออกไป เมื่อถูก import เช่นในตัวอย่างที่มีการ `$export = $Home;` คือการส่ง $Home ออกไป---
### import
- เพื่อให้สามารถเขียนหน้าเว็บในรูปแบบฟังค์ชั่น ควรใช้ `import` แทนการ `require` ซึ่งจะมีตัวอย่างและวิธีใช้กับประเภทไฟล์ต่างๆ ดังนี้
#### การ import modules
- ตัวอย่าง การ import wisit-router
```php
['Route' => $Route] = import('wisit-router');
```
- สำหรับ `modules` นั้นจะใส่เพียงชื่อของ modules ที่ต้องการเท่านั้น
- หาก modules ที่ต้องการนั้นรองรับการ import แบบ ไฟล์ย่อยๆ ก็สามารถ import ได้ เช่น
```php
$title = import('wisit-router/title');
```
- จะสังเกตุว่าไม่ต้องใส่นามสกุลของไฟล์ (.php)
#### การ import ไฟล์อื่นๆ รวมทั้งไฟล์เว็บแบบฟังค์ชึ่น
- ตัวอย่าง
```php
$HomePage = import('./src/Home');
```
- จำเป็นต้องใส่ที่อยู่ไฟล์โดยอ้างอิงจาก path นอกสุดเสมอ และ จำเป็นต้องใส่ `./` หน้าสุดข้องที่อยู่ไฟล์ตามตัวอย่าง
- และ เหมือนกับ modules เมื่อกี้คือ **ไม่ต้องใส่นามสกุลของไฟล์**
---
### modules
- ในโปรเจคนี้จะมี `modules` เริ่มต้นมาให้ 3 modules คือ
- use-import
- nexit
- wisit-router
- นอกจากนั้นคุณสามารถติดตั้ง `modules` อื่นๆ หรือเขียนขึ้นมาเองก็ได้ ซึ่งมีข้อกำหนดดังนี้
- 0 ไฟล์หลักใน `module` จะต้องชื่อ `main.m.php` เท่านั้น
- 1 ชื่อโฟลเดอร์ของ `module` คือชื่อของ `module`
- 2 หากจะทำให้มีการ `import` ซ้ำได้ และมีตัวแปรมารับค่า ต้องเขียนภายในขอบเขตการ `return` ซึ่งจะ `return` เป็น function , variable, array, obj ก็ได้ทั้งนั้น
- `use-import` คือ module ที่จะทำให้สามารถใช้ import แทน require ซึ่งในการเขียนนั้นจะไม่ใช้ require อีก
- `nexit` คือใจหลักของโปรเจคนี้ ที่จะทำให้สามารถทำงานได้อย่างที่เป็นอยู่ ซึ่งจะมีการใช้งานที่หน้า `index.php`
- `wisit-router` คือ module จาก [PHP_SPA](https://github.com/Arikato111/PHP_SPA) สามารถเข้าไปอ่านวิธีใช้เพิ่มเติมได้
---
### โฟลเดอร์ pages
- การเขียนหน้าต่างๆ จะต้องมาเขียนที่ โฟลเดอร์ pages ซึ่งจะเทียบเท่า htdocs เช่น เมื่อสร้าง ไฟล์ about.php ไว้ใน pages เมื่อเข้าหน้า about.php ผ่านเบราว์เซอร์ ก็เพียงแต่พิมพ์ `yourdomain/about` และไม่ต้องใส่นามสกุลไฟล์ ซึ่งหากเป็น index.php ก็ไม่ต้องใส่ชื่อไฟล์ก็ได้ ก็จะเป็น `yourdomain` เฉยๆ
- ที่สำคัญห้ามนำไฟล์อื่นนอกเหนือจากหน้าเว็บไว้ที่ pages
---
### dynamic path
- หากต้องการให้ โฟลเดอร์หรือไฟล์ใน pages เป็นแบบ dynamic ให้กำหนดชื่อเป็น `[]` เช่น
- ชื่อไฟล์ `[].php`
- ชื่อโฟลเดอร์ `[]`
---
### _
- หากไม่ต้องการให้หน้านั้นถูกเข้าถึงให้ใส่ `_`
- และระวังเรื่อง dynamic path ที่อาจจะมี `_` ปนอยู่
---
### _app.php
- หากมีหน้าที่เป็น function และถูกเรียกใช้งาน ตัว `_app.php` จะทำการรับหน้านั้นเข้ามา แล้วค่อย return ออกไป ซึ่งสามารถเขียนส่วนอื่นๆ เพิ่มเติม เช่น navbar หรือ footer และส่วนอื่นๆ ซึ่งจะทำให้ หน้าเว็บที่เขียนแบบ function ไม่จำเป็นต้องเขียนหน้าทั้งหมด สามารถเขียนเพียงบางส่วนของเว็บไซต์ได้
- ห้ามเปลี่ยนชื่อไฟล์
---
### _error.php
- คือหน้าที่จะแสดงผลเมื่อผู้ใช้ไม่พบหน้าที่ต้องการ ซึ่งห้ามเปลี่ยนชื่อไฟล์
---
### โฟลเดอร์ public
- ตามชื่อไฟล์เลย หากคุณต้องการเก็บอะไรที่ต้องการให้คนอื่นเข้าถึง เช่นรูบภาพ ไฟล์ ก็สามารถนำมาไว้ที่นี่ได้
- --
### โฟลเดอร์ static
- นี่เป็นโฟล์เดอร์สำหรับเก็บไฟล์ css , js
- และตอนใช้งานอย่าลืม link ละ
---### Api
ในเวอร์ชั่นที่ 2.1 จะมีการรองรับการทำ api ดังนี้
- `./pagees/_app.php` จะมีการเรียกใช้ `useApi` ซึ่งตัว **useApi** จะทำหน้าที่กรองและคัดแยก หน้า api จากหน้าเว็บปกติ
- ตัวอย่างการใช้งาน
```php
$useApi('api', $Component);
```
- อธิบายส่วนประกอบ
- 'api' คือ path ที่กำหนดไว้สำหรับ **api** หากต้องการอนุญาตทุก path ก็สามารถใช้ **'*'** ได้- **$Component** คือ ฟังก์ชั่นของหน้าเว็บต่างๆ ที่ตัว **_app** รับค่าเข้ามา ซึ่งจะนำมาใส่ใน **useApi** เพื่อให้มันทำการสั่งรันหากตรงตามเงื่อนไข
- หากต้องการส่ง `props` ลงไปใน **$Component** ก็สามารถใช้ได้ดังนี้```php
$props = 'Data';
$useApi('api', $Component, $props);
```
- ในส่วนของการเขียน **Function** เพื่อใช้งาน **api** จะทำได้ดังตัวอย่างข้างล่าง```php
$export = function ($req, $res) {
$res->json(['msg' => 'Hello world']);
};```
- อธิบายส่วนประกอบ
- `$req` จะมี type เป็น object ที่มี function ด้านใน 4 function คือ
- `$req->header()` จะเป็นตัวรับค่า headers ที่ส่งมา- `$req->body()` จะเป็นตัวรับค่า value ที่ส่งมาผ่าน body ซึ่งจะ return เป็นข้อมูลที่ส่งมา
- `$req->query()` จะเป็นตัวดึงค่า url parameter และ return เป็น array ซึ่งสามารถสร้างตัวแปรปกติมารับค่าได้ แต่หากต้องการรับค่าแค่บางค่าเท่านั้น ก็สามารถเขียนแบบนี้ได้
- `['name' => $name] = $req->query();`
ตัว `name` คือชื่อตัวแปรที่ต้องการรับ และ `$name` คือตัวแปรที่มารับค่า
- `$req->params()` คือการดึงค่า path ตำแหน่งสุดท้าย เช่น `/about/name` ตำแหน่งสุดท้ายก็คือ name ก็จะได้ name มา- หรือหากต้องการระบุตำแหน่งก็สามารถใส่ตำแหน่งลงไปได้ โดยเริ่มนับตำแหน่งแรกเป็นตำแหน่งที่ 0
- สำหรับตัว `$res` จะมี type เป็น object ที่มี function ด้านใน 4 function คือ
- `$res->set($field, $value)` เป็นตัวที่จะส่งค่าผ่าน **header** โดย `$field` เป็นเหมือนการตั้งชื่อ key ส่วน `$value` ก็คือค่าที่ต้องการใส่เข้าไป เช่น
- - `$res->set('day', 'Mon')`- `$res->send()` คือการส่ง response ออกไปในรูปแบบ string โดยใส่ string ธรรมดาลงไปใน function
- `$res->status()` คือการส่งรหัสสถานะต่างๆ เช่น 404 , 200 ซึ่งจะใส่ตัวเลขรหัดลงใน function
- `$res->json()` คือการส่ง response ออกไปในรูปแบบ json โดยใส่ PHP Array หรือ PHP Associative Arrays ลงใน function
___
### ติดตั้ง
- ใช้ [control](https://github.com/Arikato111/control) ในการติดตั้ง
ใช้คำสั่ง
```
php control create nexit-app
```
- คัดลอกโค้ดไปวางไว้หน้า `index.php` แล้วรันหน้านั้น
```