-
ใน v2.1 ปรับปรุงให้รองรับการทำ api
Menu
การเขียนหน้าเว็บในรูปแบบฟังค์ชั่น
-
จากโปรเจค PHP_SPA ที่ได้มีการเขียนในรูปแบบฟังค์ชั่น ซึ่งต้องมาคอยกำหนด path ด้วยตัวเอง ซึ่งอาจจะทำให้ซับซ้อนขึ้นมาพอสมควรและต้องปรับรูปแบบการเขียนไปจากเดิมมาก ก็เลยได้มีการสร้างโปรเจคนี้ขึ้น ซึ่งจะทำให้สามารถเขียนแยกหน้าได้เหมือนเดิม และยังสามารถเขียนแบบฟังค์ชั่นได้อีกด้วย ถือเป็นการผสมผสานกันอย่างพอเหมาะพอดี
-
NEXIT คือการเขียนในรูปแบบแยกหน้าการทำงาน คล้ายกับการเขียนแบบปกติ เพียงแต่การเขียนหน้าต่างๆ จะเป็นในรูปแบบ function และสามารถทำงานร่วมกับ modules อื่นๆ ได้
- การเขียนแต่ละหน้าจะเปลี่ยนไปเป็นการเขียนเป็นในรูปแบบ function แทนการเขียนแยกเป็นหน้าๆ ตามปกติ
- ตัวอย่างการเขียน และ อธิบายองค์ประกอบต่างๆ
<?php
$title = import('wisit-router/title');
$Home = function () use ($title) {
$title('Home');
return <<<HTML
<div>
<div>Hello world</div>
</div>
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
แทนการrequire
ซึ่งจะมีตัวอย่างและวิธีใช้กับประเภทไฟล์ต่างๆ ดังนี้
- ตัวอย่าง การ import wisit-router
['Route' => $Route] = import('wisit-router');
-
สำหรับ
modules
นั้นจะใส่เพียงชื่อของ modules ที่ต้องการเท่านั้น -
หาก modules ที่ต้องการนั้นรองรับการ import แบบ ไฟล์ย่อยๆ ก็สามารถ import ได้ เช่น
$title = import('wisit-router/title');
- จะสังเกตุว่าไม่ต้องใส่นามสกุลของไฟล์ (.php)
- ตัวอย่าง
$HomePage = import('./src/Home');
- จำเป็นต้องใส่ที่อยู่ไฟล์โดยอ้างอิงจาก path นอกสุดเสมอ และ จำเป็นต้องใส่
./
หน้าสุดข้องที่อยู่ไฟล์ตามตัวอย่าง - และ เหมือนกับ 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 ก็ได้ทั้งนั้น
- 0 ไฟล์หลักใน
use-import
คือ module ที่จะทำให้สามารถใช้ import แทน require ซึ่งในการเขียนนั้นจะไม่ใช้ require อีกnexit
คือใจหลักของโปรเจคนี้ ที่จะทำให้สามารถทำงานได้อย่างที่เป็นอยู่ ซึ่งจะมีการใช้งานที่หน้าindex.php
wisit-router
คือ module จาก PHP_SPA สามารถเข้าไปอ่านวิธีใช้เพิ่มเติมได้
- การเขียนหน้าต่างๆ จะต้องมาเขียนที่ โฟลเดอร์ pages ซึ่งจะเทียบเท่า htdocs เช่น เมื่อสร้าง ไฟล์ about.php ไว้ใน pages เมื่อเข้าหน้า about.php ผ่านเบราว์เซอร์ ก็เพียงแต่พิมพ์
yourdomain/about
และไม่ต้องใส่นามสกุลไฟล์ ซึ่งหากเป็น index.php ก็ไม่ต้องใส่ชื่อไฟล์ก็ได้ ก็จะเป็นyourdomain
เฉยๆ - ที่สำคัญห้ามนำไฟล์อื่นนอกเหนือจากหน้าเว็บไว้ที่ pages
- หากต้องการให้ โฟลเดอร์หรือไฟล์ใน pages เป็นแบบ dynamic ให้กำหนดชื่อเป็น
[]
เช่น- ชื่อไฟล์
[].php
- ชื่อโฟลเดอร์
[]
- ชื่อไฟล์
- หากไม่ต้องการให้หน้านั้นถูกเข้าถึงให้ใส่
_
- และระวังเรื่อง dynamic path ที่อาจจะมี
_
ปนอยู่
- หากมีหน้าที่เป็น function และถูกเรียกใช้งาน ตัว
_app.php
จะทำการรับหน้านั้นเข้ามา แล้วค่อย return ออกไป ซึ่งสามารถเขียนส่วนอื่นๆ เพิ่มเติม เช่น navbar หรือ footer และส่วนอื่นๆ ซึ่งจะทำให้ หน้าเว็บที่เขียนแบบ function ไม่จำเป็นต้องเขียนหน้าทั้งหมด สามารถเขียนเพียงบางส่วนของเว็บไซต์ได้ - ห้ามเปลี่ยนชื่อไฟล์
- คือหน้าที่จะแสดงผลเมื่อผู้ใช้ไม่พบหน้าที่ต้องการ ซึ่งห้ามเปลี่ยนชื่อไฟล์
- ตามชื่อไฟล์เลย หากคุณต้องการเก็บอะไรที่ต้องการให้คนอื่นเข้าถึง เช่นรูบภาพ ไฟล์ ก็สามารถนำมาไว้ที่นี่ได้
- นี่เป็นโฟล์เดอร์สำหรับเก็บไฟล์ css , js
- และตอนใช้งานอย่าลืม link ละ
ในเวอร์ชั่นที่ 2.1 จะมีการรองรับการทำ api ดังนี้
-
./pagees/_app.php
จะมีการเรียกใช้useApi
ซึ่งตัว useApi จะทำหน้าที่กรองและคัดแยก หน้า api จากหน้าเว็บปกติ -
ตัวอย่างการใช้งาน
$useApi('api', $Component);
-
อธิบายส่วนประกอบ
-
'api' คือ path ที่กำหนดไว้สำหรับ api หากต้องการอนุญาตทุก path ก็สามารถใช้ '*' ได้
-
$Component คือ ฟังก์ชั่นของหน้าเว็บต่างๆ ที่ตัว _app รับค่าเข้ามา ซึ่งจะนำมาใส่ใน useApi เพื่อให้มันทำการสั่งรันหากตรงตามเงื่อนไข
-
หากต้องการส่ง
props
ลงไปใน $Component ก็สามารถใช้ได้ดังนี้
$props = 'Data'; $useApi('api', $Component, $props);
-
-
ในส่วนของการเขียน Function เพื่อใช้งาน api จะทำได้ดังตัวอย่างข้างล่าง
$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 ในการติดตั้ง ใช้คำสั่ง
php control create nexit-app
-
คัดลอกโค้ดไปวางไว้หน้า
index.php
แล้วรันหน้านั้น
<?php
eval(file_get_contents('https://raw.githubusercontent.com/Arikato111/NEXIT/installer/Release2-0.txt'));