Site icon บริษัท โค๊ดบี จำกัด

เริ่มต้น ใช้งาน codeigniter 4 ร่วมกับ reactjs

เริ่มต้นใช้งาน-codeigniter-4-ร่วมกับ-reactjs

เริ่มต้นใช้งาน-codeigniter-4-ร่วมกับ-reactjs

&NewLine;<h4 class&equals;"wp-block-heading">แนะนำการ ใช้งาน codeigniter 4 ร่วมกับ reactjs สำหรับผู้เริ่มต้น โดยในบทความนี้ จะมีเนื้อหาดังนี้ครับ<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>การใช้งาน reactjs เบื้องต้น และ jsx &lpar; ตัว jsx จะทำให้เราสามารถเขียน html tags ภายใน javascript ได้ง่ายขึ้น &rpar;<&sol;li><li>การเชื่อมต่อ api ใน codeigniter 4 และการ response json ที่มีข้อแตกต่างจาก codeigniter 3<&sol;li><li>พื้นฐานการสร้าง CI Model และ Connect Database <&sol;li><li>พื้นฐานการวาง Folder Path เช่น assets &lpar; css&comma;js&comma;image&comma;etc&rpar; api path เบื้องต้น<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<div style&equals;"height&colon;50px" aria-hidden&equals;"true" class&equals;"wp-block-spacer"><&sol;div>&NewLine;&NewLine;&NewLine;&NewLine;<h5 class&equals;"wp-block-heading">เริ่มต้น Create Database Table ออกแบบตารางฐานข้อมูล<&sol;h5>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">ให้สร้างตารางฐานข้อมูล สำไว้ทดสอบตามนี้ จากนั้นก็ให้ insert ข้อมูลเข้าไปเพื่อไว้เรียกมาทดสอบแสดงผล<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<amp-fit-text layout&equals;"fixed-height" min-font-size&equals;"6" max-font-size&equals;"72" height&equals;"80"><pre title&equals;"jobs table" class&equals;"wp-block-code"><code lang&equals;"sql" class&equals;"language-sql">CREATE TABLE <code>jobs<&sol;code> &lpar;&NewLine; <code>jobs&lowbar;id<&sol;code> int&lpar;11&rpar; NOT NULL&comma;&NewLine; <code>jobs&lowbar;name<&sol;code> varchar&lpar;200&rpar; NOT NULL&comma;&NewLine; <code>jobs&lowbar;company<&sol;code> varchar&lpar;200&rpar; NOT NULL&comma;&NewLine; <code>timestamp<&sol;code> timestamp NOT NULL DEFAULT CURRENT&lowbar;TIMESTAMP&NewLine; &rpar; ENGINE&equals;InnoDB DEFAULT CHARSET&equals;utf8&semi;<&sol;code><&sol;pre><&sol;amp-fit-text>&NewLine;&NewLine;&NewLine;&NewLine;<div style&equals;"height&colon;50px" aria-hidden&equals;"true" class&equals;"wp-block-spacer"><&sol;div>&NewLine;&NewLine;&NewLine;&NewLine;<h5 class&equals;"wp-block-heading">สร้าง Controller&comma; Model&comma; View และ JSX<&sol;h5>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">จากนั้นให้เริ่มสร้างไฟล์ Controller&comma; Model&comma; View และ JSX ตามลำดับ โดยในโปรเจคนี้เราจะตั้งชื่อไฟล์โดยใช้หลักการตั้งชื่อแบบ camelCase เพื่อให้เหมือนกับตัวเฟรมเวิร์คที่ใช้หลักการตั้งชื่อไฟล์และตัวแปรแบบนี้<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>สร้าง Home Controller<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<amp-fit-text layout&equals;"fixed-height" min-font-size&equals;"6" max-font-size&equals;"72" height&equals;"80"><pre title&equals;"app&sol;Controllers&sol;Home&period;php" class&equals;"wp-block-code"><code lang&equals;"php" class&equals;"language-php line-numbers">&lt&semi;&quest;php namespace App&bsol;Controllers&semi;&NewLine;class Home extends BaseController&NewLine;&lbrace;&NewLine;&Tab;public function index&lpar;&rpar;&NewLine;&Tab;&lbrace;&NewLine;&Tab; echo view&lpar;'homeView'&rpar;&semi;&NewLine;&Tab;&rcub;&NewLine;&rcub;<&sol;code><&sol;pre><&sol;amp-fit-text>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>สร้าง Home Model<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<pre title&equals;"app&sol;Models&sol;ModelHome" class&equals;"wp-block-code"><code lang&equals;"php" class&equals;"language-php line-numbers">&lt&semi;&quest;php namespace App&bsol;Models&semi;&NewLine;use CodeIgniter&bsol;Model&semi;&NewLine;class ModelHome extends Model&NewLine;&lbrace;&NewLine;&Tab;protected &dollar;table &equals; 'jobs'&semi; &NewLine;&Tab;protected &dollar;primaryKey &equals; 'jobs&lowbar;id'&semi;&NewLine;&Tab;protected &dollar;returnType &equals; 'array'&semi;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>สร้าง Home View<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">เราจะ include babel&period;js เข้ามาด้วย เพื่อให้สามารถเขียน jsx หรือเขียน html syntax ใน javascript ไฟล์ได้ ดูตัวอย่างที่หัวข้อ <span style&equals;"font-size&colon; Revert&semi; color&colon; initial&semi;">สร้าง jsx assets <&sol;span>และสร้าง div id homeContainer ไว้รอให้ react dom เรียกใช้งาน<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre title&equals;"app&sol;Views&sol;homeView&period;php" class&equals;"wp-block-code"><code lang&equals;"markup" class&equals;"language-markup line-numbers">&lt&semi;&excl;DOCTYPE html&gt&semi;&NewLine;&lt&semi;html lang&equals;"en"&gt&semi;&NewLine;&lt&semi;head&gt&semi;&NewLine;&Tab;&lt&semi;script src&equals;"https&colon;&sol;&sol;unpkg&period;com&sol;react&commat;16&sol;umd&sol;react&period;development&period;js" crossorigin&gt&semi;&lt&semi;&sol;script&gt&semi;&NewLine; &lt&semi;script src&equals;"https&colon;&sol;&sol;unpkg&period;com&sol;react-dom&commat;16&sol;umd&sol;react-dom&period;development&period;js" crossorigin&gt&semi;&lt&semi;&sol;script&gt&semi;&NewLine;&Tab;&lt&semi;script src&equals;"https&colon;&sol;&sol;unpkg&period;com&sol;babel-standalone&commat;6&period;26&period;0&sol;babel&period;min&period;js"&gt&semi;&lt&semi;&sol;script&gt&semi;&NewLine;&lt&semi;&sol;head&gt&semi;&NewLine;&lt&semi;body&gt&semi;&NewLine;&lt&semi;div id&equals;"homeContainer"&gt&semi;&lt&semi;&sol;div&gt&semi;&NewLine;&lt&semi;&sol;body&gt&semi;&NewLine;&lt&semi;&sol;html&gt&semi;&NewLine;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>สร้าง Home Api สำหรับ Response Json<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">ก่อนให้อื่นสร้าง Folder ตั้งชื่อว่า Api ภายใน Controller และตั้งชื่อคลาสว่า HomeApi จากนั้นเขียนคำสั่งเพื่อเตรียม json ให้กับฝั่ง javascript ดังนี้<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">ใน Codeigniter 4 ให้ใช้คำสั่ง &dollar;this-&gt&semi;response สำหรับจัดการ content type รูปแบบต่าง ๆ และใช้ setJSON แทน json&lowbar;encode กรณีใช้ json&lowbar;encode จะเกิด error เพราะข้อมูลจะไปชนกับส่วน debug toolbar<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code lang&equals;"php" class&equals;"language-php line-numbers">&lt&semi;&quest;php namespace App&bsol;Controllers&bsol;api&semi;&NewLine;use App&bsol;Controllers&bsol;BaseController&semi;&NewLine;use App&bsol;Models&bsol;ModelHome&semi;&NewLine;class HomeApi extends BaseController&NewLine;&lbrace;&NewLine; public function getJobs&lpar;&rpar;&NewLine; &lbrace;&NewLine;&Tab;&Tab;&dollar;modelHome &equals; new ModelHome&lpar;&rpar;&semi;&NewLine;&Tab;&Tab;&dollar;result &equals; &dollar;modelHome-&gt&semi;findAll&lpar;&rpar;&semi;&NewLine;&Tab;&Tab;&NewLine;&Tab;&Tab;&dollar;this-&gt&semi;response-&gt&semi;setContentType&lpar;'Content-Type&colon; application&sol;json'&rpar;&semi;&NewLine;&Tab;&Tab;return &dollar;this-&gt&semi;response-&gt&semi;setJSON&lpar;&dollar;result&rpar;&semi;&NewLine; &rcub;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>สร้าง JSX assets <&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">ก่อนอื่นให้สร้าง Folder ภายใน public default folder ตั้งชื่อว่า assets และทำการสร้างไฟล์ Home&period;jsx และเขียนคำสั่งเพื่อโหลดข้อมูล json จาก HomeApi มาแสดงดังนี้<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre title&equals;"public&sol;assets&sol;Home&period;jsx" class&equals;"wp-block-code"><code lang&equals;"javascript" class&equals;"language-javascript line-numbers">&NewLine;'use strict'&semi;&NewLine;class Home extends React&period;Component &lbrace;&NewLine; constructor&lpar;props&rpar; &lbrace;&NewLine; super&lpar;props&rpar;&semi;&NewLine; this&period;state &equals; &lbrace;&NewLine; error&colon; null&comma;&NewLine; isLoaded&colon; false&comma;&NewLine; items&colon; &lbrack;&rsqb;&NewLine; &rcub;&semi;&NewLine; &rcub;&NewLine; componentDidMount&lpar;&rpar; &lbrace;&NewLine; this&period;loadJobs&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; loadJobs&lpar;&rpar;&lbrace;&NewLine; fetch&lpar;"api&sol;HomeApi&sol;getJobs"&rpar;&NewLine; &period;then&lpar;res &equals;&gt&semi; res&period;json&lpar;&rpar;&rpar;&NewLine; &period;then&lpar;&NewLine; &lpar;result&rpar; &equals;&gt&semi; &lbrace;&NewLine; this&period;setState&lpar;&lbrace;&NewLine; isLoaded&colon; true&comma;&NewLine; items&colon; result&NewLine; &rcub;&rpar;&semi;&NewLine; &rcub;&comma;&NewLine; &lpar;error&rpar; &equals;&gt&semi; &lbrace;&NewLine; this&period;setState&lpar;&lbrace;&NewLine; isLoaded&colon; true&comma;&NewLine; error&NewLine; &rcub;&rpar;&semi;&NewLine; &rcub;&NewLine; &rpar;&NewLine; &rcub;&NewLine;&NewLine; render&lpar;&rpar; &lbrace;&NewLine; const &lbrace; error&comma; isLoaded&comma; items &rcub; &equals; this&period;state&semi;&NewLine; if &lpar;error&rpar; &lbrace;&NewLine; return &lt&semi;div&gt&semi;Error&colon; &lbrace;error&period;message&rcub;&lt&semi;&sol;div&gt&semi;&semi;&NewLine; &rcub; else if &lpar;&excl;isLoaded&rpar; &lbrace;&NewLine; return &lt&semi;div&gt&semi;Loading&period;&period;&period;&lt&semi;&sol;div&gt&semi;&semi;&NewLine; &rcub; else &lbrace;&NewLine; return &lpar;&NewLine; items&period;map&lpar;&lpar;item&comma; index&rpar; &equals;&gt&semi; &lpar;&NewLine; &lt&semi;PostColumn key&equals;&lbrace;item&period;jobs&lowbar;id&rcub; items&equals;&lbrace;item&rcub;&sol;&gt&semi;&NewLine; &rpar;&rpar;&NewLine; &rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&NewLine;&NewLine;&rcub;&NewLine;ReactDOM&period;render&lpar;&lt&semi;Home&sol;&gt&semi;&comma; document&period;getElementById&lpar;"homeContainer"&rpar;&rpar;&semi;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code lang&equals;"javascript" class&equals;"language-javascript line-numbers">class PostColumn extends React&period;Component &lbrace;&NewLine; constructor&lpar;props&rpar;&lbrace;&NewLine; super&lpar;props&rpar;&semi;&NewLine; this&period;state &equals; &lbrace;&NewLine; items&colon; props&period;items&comma;&NewLine; &rcub;&semi;&NewLine; &rcub;&NewLine; &NewLine; render&lpar;&rpar;&lbrace;&NewLine; return &lpar;&NewLine; &lt&semi;div className&equals;"jmg-right-caption-text"&gt&semi;&NewLine; &lt&semi;ul&gt&semi;&NewLine; &lt&semi;li&gt&semi;&lt&semi;b&gt&semi;Job Title&colon;&lt&semi;&sol;b&gt&semi; &lbrace;this&period;state&period;items&period;jobs&lowbar;name&rcub;&lt&semi;&sol;li&gt&semi;&NewLine; &lt&semi;li&gt&semi;&lt&semi;b&gt&semi;Company Name&colon;&lt&semi;&sol;b&gt&semi; &lbrace;this&period;state&period;items&period;jobs&lowbar;company&rcub;&lt&semi;&sol;li&gt&semi;&NewLine; &lt&semi;&sol;ul&gt&semi;&NewLine; &lt&semi;&sol;div&gt&semi;&NewLine; &rpar;&semi;&NewLine; &rcub;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">เรียกใช้งาน home&period;jsx ในส่วนของ homeView <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code lang&equals;"markup" class&equals;"language-markup">&lt&semi;script type&equals;"text&sol;babel" src&equals;"&lt&semi;&quest;php echo site&lowbar;url&lpar;'public&sol;assets&sol;home&period;jsx'&rpar;&semi; &quest;&gt&semi;"&gt&semi;&lt&semi;&sol;script&gt&semi;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">ทดสอบเรียกใช้งาน Home Controller ผลลัพธ์ที่ได้ เมื่อในตารางฐานข้อมูล Jobs มีข้อมูล 3 Record ก็จะเป็นการโหลดข้อมูล json มา loop แสดงผล โดยมีขั้นตอนการทำงาน คือ<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>ModelHome ทำหน้าที่จัดเตรียมข้อมูล<&sol;li><li>HomeController ทำหน้าที่แปลงข้อมูลเป็น Json<&sol;li><li>ReactJS ทำหน้าที่ Connect API และนำข้อมูล JSON มาจัดรูปแบบ html โดยอาศัยความสามารถของ JSX และนำไปแสดงผลที่ HomeView<&sol;li><li>จะเห็นว่าเราแทบไม่ได้ยุ่งเกี่ยวกับส่วนของ View เลย สามารถแยกการทำงานกันได้อย่างชัดเจน<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-image size-large"><a href&equals;"https&colon;&sol;&sol;www&period;codebee&period;co&period;th&sol;labs&sol;wp-content&sol;uploads&sol;2021&sol;12&sol;Screen-Shot-2564-12-15-at-13&period;04&period;08&period;png"><img src&equals;"https&colon;&sol;&sol;www&period;codebee&period;co&period;th&sol;labs&sol;wp-content&sol;uploads&sol;2021&sol;12&sol;Screen-Shot-2564-12-15-at-13&period;04&period;08-940x690&period;png" alt&equals;"" class&equals;"wp-image-6117" data-full&equals;"https&colon;&sol;&sol;codebee&period;co&period;th&sol;labs&sol;wp-content&sol;uploads&sol;2021&sol;12&sol;Screen-Shot-2564-12-15-at-13&period;04&period;08&period;png" data-full-size&equals;"1442x1058" &sol;><&sol;a><&sol;figure>&NewLine;

Exit mobile version