การใช้งาน Twig Template Engine ตอนที่ 6

การใข้งาน Control Flow จะเป็นส่วนที่สำคัญเป็นอย่างมากในการแสดงผลข้อมูล เพราะเราต้องทำการเลือกการแสดงผลโดยใช้ if-else และ ทำต้องการดึงข้อมูลทั้งหมดออกมาแสดงผลโดยใช้ for

ใน Twig เองก็มี Control Flow อยู่ 2 ตัวคือ if และ for โดยเริ่มจาก if มี syntax ดังนี้

ถ้า ค่าของตัวแปร online มีค่าเท่ากับ false ก็จะแสดงผล ข้อความในตัวอย่าง

สังเกตว่า Syntax จะอ่านง่ายกว่าเขียน php ทั่วไปมาก

อีกตัวนึงจำเป็นการใช้ for โดยมี syntax ตามตัวอย่าง

ในตัวอย่างนี้จะทำการแสดงผลข้อมูลทั้งหมดจากใน ตัวแปร array ที่ชื่อว่า users และในแต่ละรอบจะเก็บค่าไว้ในตัวแปร user สุดท้ายก็จะแสดงผล property ที่อยู่ในตัวแปร user นั้นออกมา

โดยในตัวอย่างด้านบน array users จะถูกส่งเข้ามาเป็นแบบ Array ของ Object User

เราสามารถที่จะใช้ if และ for ผสมกันได้โดยใช้ synatax แบบนี้

จะเห็นว่าการเขียนด้วย Twig นั้นจะอ่านง่ายและใกล้เคียงกับภาษามนุษย์มากว่า PHP มากๆ

การใช้งาน Twig Template Engine ตอนที่ 5

การแสดงผลตัวแปรด้วย {{ … }} นอกจากเราจะได้ความสะดวกสบายในการแสดงผล เนื่องจาก การแสดงผลด้วย {{ … }}ไม่ต้องพิมพิ์ echo แล้วเรายังสามารถตั้งค่าให้มันทำการ escape character โดยอัตโนมัติได้ด้วย

ตัวแปรทุกตัวที่แสดงผลอยู่ภายใน block autoeacape จะทำการ escape อักขระพิเศษ หรือ speacial character  ให้โดยอัตโนมัติ

แต่ถ้าเราไม่ต้องการ escape character เราจะทำการ ใส่ filter raw ไว้ด้านหลังตัวแปร ตามตัวอย่างบรรทัดที่ 3

ในบรรทัดที่ 4 เราจะไม่สามารถใส่ escape อีกครั้งเพื่อให้ Twig ทำ double escape ได้ เพราะ Twig จะมองเห็น autoescape และทำการ escape ให้เพียงครั้งเดียวถ้าเราต้องการทำ double escape เราต้องใส่ strategy  เข้าไปเป็น parameter ของ filter escape

 

 

การใช้งาน Twig Template Engine ตอนที่ 4

จริงๆแล้ว PHP เป็นภาษาที่เขียนง่ายและได้รับความนิยมเป็นอันดับ 1 ในการพัฒนา Web Application เนื่องจากความง่ายในการเขียนอยู่แล้ว ดังนั้นยิ่งถ้าเราใช้ Template Engine มาช่วยเพิ่มประสิทธิภาพก็จะยิ่งช่วยให้การเขียน PHP เป็นระเบียบและง่ายมากขึ้นในตอนที่ 4 เราจะเริ่มจากการเอา data มาแสดงผลใน Template

อันดับแรกต้องย้อนไปย้ำกันอีกครั้งในเรื่องของคำว่า Template ซึ่งเป็นส่วนของการแสดงผล เราจะเปลี่ยนเฉพาะ data หรือ parameter เท่านั้น โดยตัว Template นั้นจะเป็นไฟล์ HTML, XML, CSV หรือไฟล์อะไรก็ได้ เพราะ Twig ไม่ได้กำหนด มนี่คือสิ่งที่แตกต่างจาก Smarty เนื่องจาก Smarty จะทำการกำหนดให้ Template มีนามสกุลเป็น .tpl หรือ .php แต่ใน Twig เราสามารถใส่นามสกุลอะไรก็ได้ เวลาเราอ้างถึงชื่อ Template เราถึงต้องใส่นามสกุลเข้าไปด้วย

ส่วนของ Template เราจะสร้าง file หน้าตาแบบในตัวอย่างและทำการ Save file เป็น index.html

เป็น Template ที่จะรับข้อมูลมาผ่านทางตัวแปร name

โดยการแสดงผลตัวแปรเราจะใช้สัญลักษณ์ {{ …  }} ครอบชื่อของตัวแปรไว้ เวลาเราเรียก render() เราจะส่งตัวแปรเข้าไปผ่านทาง Array

ในตอนต่อไปจะเป็นรายละเอียดของ การแสดงผลตัวแปรด้วย  {{ … }}

 

การทำให้ object ของเราสามารถใช้ function count ได้เหมือนกับ array

ในการทำงานกับ object ใดๆ ในบางครั้งเราอยากที่จะทำการเรียกใช้ function count เหมือนอย่าง array บ้าง เพราะบางทีเราอยากที่จะวน loop for เพื่อเข้าถึงสมาชิกของ object ทุกตัว หรืออาจอยากได้จำนวนของ object นั้นๆไปประยุกต์ใช้งานทำอย่างอื่น แต่เราไม่สามารถที่จะใช้ function count ได้เหมือนกับ array

วิธีการที่จะทำให้ object นั้นสามารถ count ได้ ก่อนอื่นเราต้องทำการ count มันให้ได้ก่อน ขึ้นอยู่กับว่าเราเลือกที่จะ count ด้วยวิธีไหน อาจเป็นการ count โดย Query ข้อมูลจากฐานข้อมูล โดยใช้ SELECT COUNT(*) …. หรือการ count object โดยการนับ object ที่ทำการ new ขึ้นมาก็แล้วแต่ เราจะไม่ได้ลงในรายละเอียดของวิธีการ count แต่ละแบบ แต่ในตัวอย่างเราจะเลือกอย่างหลังคือทำการนับ object ที่ได้ทำการ instantiate ขึ้นมา

ในตัวอย่างนี้ตัวแปร $num จะเพิ่มขึ้นทุกครั้งที่มีการ new Student ขึ้นมาใช้งาน แต่จุดประสงค์หลักของบทความนี้คือต้องการเอาค่า $num ที่นับได้ไปแสดงผลโดยการใช้ function count เราเลยต้องทำการ implement interface ที่ชื่อว่า countable เพื่อให้ใช้ function count กับ object นี้ได้

เพียงแค่นี้ดราก็จะสามารถใช้ function count กับ object ได้แล้ว

 

 

การใช้งาน Twig Template Engine ตอนที่ 3

ในการใช้งาน Twig Template Engine ตอนที่ 2 เราสามารถ load Template จาก

หลังจากที่เราทำการ load library มาเรียบร้อยแล้ว สิ่งที่เราต้องทำต่อไปคือการ load template ขึ้นมาใช้งาน

เริ่มจาก การใช้ Twig_Loader_Array จะทำการ load template ขึ้นมา โดยใน template ที่ชื่อว่า index มี content เป็น Hello แล้วตามด้วยตัวแปร name

หลังจากนั้นเราจะใช้ Twig_Environment ในการกำหนดค่า Configuration โดยเราจะส่งตัว Twig_Loader_Array ที่ได้ทำการ new Object ขึ้นมาเข้าไปเป็น parameter ของ constructor

ขั้นตอนสุดท้ายจะเป็นการใช้ render แสดงผลลัพธ์ออกไปที่หน้าจอ เราจะใช้ method นี้ในการส่งตัวแปรหรือ parameter เข้าไปใน template ในตัวอย่างจะเป็นการส่งค่า name เข้าไปใน template ที่ชื่อว่า index

ผลลัพธ์ที่ได้จากตัวอย่างนี้คือ Hello Irobust

นอกจากการ Load Template โดยที่ใช้ Array เหมือนกับตัวอย่างที่แล้วเราสามารถที่จะ load โดยอ้างถึง File ได้

เราจะ load file template เข้ามาโดยการใช้ Class Twig_Loader_Filesystem เมื่อเราทำการ newTwig_Loader_Filesystem ขึ้น แล้ว เราสามารถอ้างถึงชื่อของ template ได้ปกติ

 

การใช้งาน Twig Template Engine ตอนที่ 2

ในบทความนี้เราจะเริ่มต้นทำการติดตั้ง Twig โดยการติดตั้ง เราต้องมี PHP 5.2.4 ขึ้นไป  เราสามารถทำการติดตั้งได้ง่ายๆโดยใช้ composer โดยใช้คำสั่ง

การที่เราใช้ composer ติดตั้งจะง่ายมากในการใช้งานโดยเราแค่ require autoload.php ใน folder ที่ชื่อว่า vendor เพียงแค่นี้เราก็สามารถมี Twig ไว้ใชงานกันแล้ว

แต่ถ้าไม่ใช้งาน composer เราก็สามารถที่จะไป Clone Project จากใน Git ได้

หรือเราจะเลือกการติดตั้งโดยใช้ PEAR Package โดยพิมพิ์ command ดังนี้

ดังนั้นโดยสรุปเราจะมีวิธีในการติดตั้ง ดังนี้

  • Composer (Recommend)
  • Clone หรือ Download Project จาก Git
  • กาติดตั้งผ่าน PEAR Package

หลังจากนั้นเราก็ต้องไป require file ที่ชื่อว่า Autoload.php ใน folder Twig-1.16.2/lib/Twig และสุดท้ายเราจำเป็นต้อง เรียก method register ของ class Twig_Autoloader

ก่อนที่เราจะจบบทความนี้ไปเรามีคำนิยามที่ต้องทำความเข้าใจอยู่ 1 คำคือคำว่า Template โดยในการใข้งาน Template Engine ไม่ว่าจะเป็น Smarty หรือ Twig ก็ตามเราจะทำการสร้างไฟล์ Template ขึ้นมาก่อนหลังจากนั้นเราถึงจะทำการส่ง data หรือ parameter เข้าไปใน Template นั้น โดยการใช้ method render()

ในบทความต่อไปเราจะเรียก Template ขึ้นมาใช้งานใน ตอนที่ 3

การใช้งาน Twig Template Engine ตอนที่ 1

เริ่มต้นจากการทำความรู้จักกับ Template Engine ก่อน จริงๆแล้ว Template Engine มีอยู่ 2 ตัวที่ได้รับความนิยม คือ

  • Smarty
  • Twig

ตัวที่ได้รับความนิยมเป็นตัวแรกๆคือ Smarty แต่หลังจากที่มีการใช้ Twig ใน Symfony 2 เนื่องจากเป็นทีมพัฒนาเดียวกัน เลยทำให้ Twig ได้รับความนิยมสูงขึ้นเรื่อยๆจนกระทั่งมีปรมาณคนใช้ Template Engine ทั้ง 2 ตัวพอๆกัน

มาพูดถึงข้อดีของการใช้ Template Engine กันบ้าง ทำไมเราถึงต้องใช้ Template Engine? มักจะเป็นคำถามที่หลายคนที่เริ่มต้นเรียนรู้ Twig หรือ Smarty มักจะถามเสมอ เพราะเหมือนถูกบังคับให้เรียนรู้ Syntax ใหม่ๆ ทั้งๆที่เราสามารถเขียน PHP ลงในหน้า Page HTML ได้อยู่แล้ว ดังนั้นข้อดีของการมี Template Engine คือ

  • เราสามารถแยก Code ส่วนของ Display หรือ View ออกมาอย่างชัดเจน
  • เราสามารถที่จะแยกคนทำ HTML และ JavaScript กับ คนทำ PHP ออกจากกัน การที่เราสามารถแบ่งงานกันทำได้ทำให้เราสามารถมี Specialist หรือผู้เชี่ยวชาญในแต่ละด้านได้
  • คนที่ทำงานที่ฝั่งของ Display จะไม่ต้องรู้ว่าฐานข้อมูล หรือ Business Logic มีรายละเอียดอะไรบ้าง

เพราะฉะนั้นในยุคที่ต้องการ Application ที่สวยงาม ใช้งานง่าย(ต้องใช้ UI Designer ที่เก่ง) และ Businees Logic ที่ซับซ้อนมากขึ้นเรื่อยๆ(ต้องการคนเขียน PHP ที่เก่ง) ทำให้เราต้องการผู้เชี่ยวชาญทั้ง 2 ด้าน ใน 1 Application ในบทความตอนต่อไปเราจะไปทำความรู้จักการใช้งาน Twig กัน

การใช้งาน Eloquent โดยไม่ง้อ Laravel

จากบทความตอนที่แล้ว ทำความรู้จักกับ Eloquent เราได้ทำความรู้จักกับ Feature ต่างๆที่ Eloquent มี แต่เราต้องใช้กับ Laravel เท่านั้นรึเปล่า คำตอยคือไม่ใช่ สำหรับคนที่ยังไม่ได้ใช้งาน Laravel เราสามารถนำเอา Eloquent ไปใช้งานข้างนอกได้เหมือนกับ library ปกติ

โดยการนำเอา Eloquent ไปใช้งานมีดังนี้

ทำการ Download Eloquent จาก Github งานนี้ต้องใช้ Composer เข้าช่วย โดยการสร้าง Coposer.json ไว้ใน Folder ที่ต้องการจะ Download โดยใน Conposer จะมีเนื้อหาดังนี้

หลังจากนั้น เราเข้าไปที่ Folder ที่เราต้องการนี้แล้ว run คำสั่ง

เท่านี้ Conposer จะไปทำการ Download library ตัวที่เกี่ยวข้องมาให้เราทั้งหมด

หลังจากนั้นเราต้อง require ไฟล์ autoload.php ที่อยู่ใน folder vendor เข้ามา

ขั้นตอนที่สำคัญที่สุดคือการ new Capsule  ขึ้นมาใช้งาน เพราะ Capsule นี่จะเป็น Class ที่ทำให้ Eloquent สามารถทำงานอยู่ภายนอก Laravel ได้ แนะนำว่าให้แยกไฟล์นี้ไว้ต่างหาก แล้วใช้การ require หรือ include เข้ามาใช้งาน

โดย Code ที่เขียนมีดังนี้

เปลียน Connection ไปยัง Database ที่เราต้องการ หลังจากนั้นเราก็สามารถใช้งาน Eloquent ได้โดยไม่ต้องพึ่ง Laravel อีกต่อไป

ทั้งแบบ Query Builder

และ แบบ ORM

 

ทำความรู้จักกับ Eloquent

หลายคนที่ได้ใช้ Laravel ส่วนหนึ่งคงจะติดใจการใช้งานตัว ORM อย่าง Eloquent ซึ่งใช้ Active Record Pattern เหมือนกับใน Ruby on Rail ซึ่งจะทำให้เราสามารถทำงานกับฐานข้อมูลได้อย่างง่ายดายและเป็น OOP แบบ 100% ซึ่งความสามารถของ Eloquent นั้นทำได้หลายอย่าง ทั้งเรื่องของ Query Builder ซึ่งจะเหมือนกับ Active Record ใน CI เราสามารถทำงานกับฐานข้อมูลโดยที่ไม่ต้องทำการ Map Object เลย Feature นี้จะเหมาะกับคนที่ยังติดอยู่กับการเขียน Query ด้วย SQL

นอกจากนี้ยังมีส่วนของ ORM ซึ่งต้องทำการ Mapping ก่อนการใช้งาน แต่การ Mapping แบบ Acrive Record นั้นง่ายมากๆ

ส่วน Featuure พื้นฐานอื่นๆ เช่นการสร้าง Connection ไปยัง Database หลายๆตัว หรือการ return ผลลัพธ์กลับมาเป็น Array หรือ JSON ก็มีให้ใช้งานอย่างครบถ้วน

ส่วน Feature ที่เด็ดมากของ Eloquent คือมีตัว Migration ทำให้เราสร้าง Schema ของ Database เก็บไว้ใน Code เลย (เราสามารถ Generate Table ใหม่กี่ครั้งก็ได้ ) ต่อไปนี้เราไม่ต้องแยกทำ Version Control ของ Database Schema อีกต่อไป

การทำงานกับการ Insert, Update และ Delete แบบทีละหลายๆ Record ก็ทำได้ง่าย

เรื่องของความรวดเร็วก็ต้องบอกว่าทำงานได้เร็ว โดยที่ไม่รู้สึกว่ามี ORM

ส่วนเรื่องของ Database ที่ Support นั้น มีหลายตัว ประกอบไปด้วย MySQL, Postgres, SQLite, and SQL Server เสียอย่างเดียวยังไม่ Support Database ยักษ์ใหญ่อย่าง Oracle

ข้อเสียอีกอย่างที่สำคัญมากคือ การ Mapping แบบ Single Table Inheritance และ Create Table Inheritance ยังทำไม่ได้ แต่ก็มีคนสร้าง plugin ต่างๆ  เพื่อพยายามปิดช่องโหว่ตรงนี้

แต่โดยรวมแล้วถือว่าเป็น ORM ที่น่าใช้งานเป็นอย่างยิ่ง

ค่าที่สามารถแปลงเป็น False ได้ หรือเทียบเท่ากับ False

PHP เป็นภาษาที่ Dynamic Type โดย Complier จะทำการ convert Data Type ให้โดยอัตโนมัติ ดังนั้นสิ่งที่ต้องระมัดระวังคือ การตวจสอบว่าค่าที่ได้เป็น FALSE นั้น จริงๆแล้วอาจเป็นค่าที่เทียบเท่า FALSE ได้ ยกตัวอย่างเช่น

การใช้ strpos() ถ้าเราทำการตรวจสอบเงื่อนไข โดยใช้ “==” อาจทำให้เกิดการผิดพลาดได้ เพราะ ถ้าตัวอักษรหรือข้อความที่เราทำการค้นหาเป็นตัวแรกในข้อความ ค่าที่ return กลับมาจะเป็น 0 ซึ่ง PHP จะมองว่าเป็น FALSE กลายเป็นว่าเราหาตัวอักษรหรือข้อความที่เราต้องการไม่พบทั้งๆ ที่จริงๆแล้วพบตั้งแต่ตัวแรกของข้อความ เราจึงจำเป็นต้องใช้ “===” ในการเปรียบเทียบ

Read more ค่าที่สามารถแปลงเป็น False ได้ หรือเทียบเท่ากับ False