เอา Zend Framework มาใส่ Codeigniter Framework เพื่อใช้ Zend Component

entry นี้ผมกะจะเขียนตั้งนานแล้ว แต่ว่าไม่มีโอกาสเสียที วันนี้เลยเอาสักหน่อยครับ

ผมไม่เท้าความว่า Codeigniter Framework คืออะไร หาอ่านกันเอานะครับ ติดตั้งอย่างไร เขียนยังไง ทำงานอย่างไร อันนี้หาเอาได้ในเว็บต่างๆ ทั้งไทยและเทศ ผมว่ามีเยอะ ผมลุยเรื่องปรับแต่งเพิ่มเติมเลยดีกว่า

เหตุผลที่เอา Component ของ Zend Framework (ต่อไปเรียก Zend) มาใช้ใน Codeigniter (ต่อไปเรียก CI) เพราะความครบเครื่องในการนำไปใช้งาน ที่หลายๆ อย่างทำได้ดีกว่าตัว CI เยอะมาก แต่โครงสร้างและติดตั้งของ Zend ทำได้ยุ่งยากกว่า ผมเลยเอามาผสมกัน หากใครใช้ Zend มาบ้างจะทราบดีว่ามันอลังการงานสร้างแค่ไหน ครบเครื่องอย่างไร

เอาหล่ะ ไม่พูดอะไรมาก ก่อนอื่นสร้างไฟล์ที่ path ตามด้านล่างครับ

  1. system/application/libraries/Zend.php

ภายในไฟล์ก็ประกอบด้วยโค้ดตามด้วยล่างครับ

  1. < ?php
  2. class CI_Zend {
  3.  
  4.     function __construct ($class = NULL) {
  5.  
  6.         ini_set('include_path',  ini_get('include_path') . PATH_SEPARATOR . APPPATH . 'libraries');
  7.  
  8.         if ($class) {
  9.             require_once (string) $class . EXT;
  10.             log_message('debug', "Zend Class $class Loaded");
  11.         } else {
  12.             log_message('debug', "Zend Class Initialized");
  13.         }
  14.     }
  15.  
  16.     function load ($class) {
  17.         require_once (string) $class . EXT;
  18.         log_message('debug', "Zend Class $class Loaded");
  19.     }
  20. }
  21. ?>

โดยเมื่อได้ไฟล์ Zend.php แล้ว ให้เอา Directory “Zend” ทั้งหมดไปใส่ที่

  1. system/application/libraries

เวลาใช้งาน ก็ใช้งานผ่าน Controller ของ CI โดยมี 2 แบบคือ

1. โหลด Library Zend ที่เขียนสำหรับตั้ง include path ไปพร้อมๆ กับโหลด Component ไปด้วยเลย

  1. $this->load->library('zend', 'Zend/Package/Name');

2. โหลดตัว Library Zend ที่เขียนสำหรับตั้ง include path ก่อน แล้วค่อยโหลดตัว Component ทีหลังเป็นตัวๆ ไปก็ได้

  1. $this->load->library('zend');
  2. $this->zend->load('Zend/Package/Name');

การโหลด Zend Component แบบนี้ก็ทำให้ดูเป็นระเบียบกว่าการ require_once เข้ามา เพราะอย่างน้อยก็ทำให้เราทำ logs tracking ใน CI ได้ครับ รวมไปถึงการตั้ง include path เพื่อโยกย้าย Zend Framework ไปที่ไหนๆ ก็ได้ตามแต่เราตั้งใน include path โดยไม่ต้องอ้างอิง include path ของ System

เพียงเท่านี้เราก็ลั้นล้ากับ Zend ใน CI ได้สบายใจแล้วหล่ะครับ ;)

/*p0rt80 BKK*/ – PHP Day

ด้วยความร่วมมือจาก Narisa.com, ThaiAdmin.org, Blognone.com, ThaiThinkPad.com และ ไมโครซอฟท์ (ประเทศไทย) เราขอเชิญเพื่อนๆ ชาว Dev และเพื่อน ๆ ใน Community (คุณนั่นแหละ) และบุคคลที่สนใจ มาพบปะสังสรรค์แลกเปลี่ยนประสบการณ์กัน ในงาน /* pOrt80 BKK */ ซึ่งเป็นงานที่ว่ากันด้วยเรื่องการพัฒนา App โดย PHP และ Open source ต่าง ๆ เพื่อใช้ในงานประจำวันของเรา นอกจากเพื่อน ๆ ที่อาสาเป็น Speaker ในงานเช่น คุณสมเกียรติ ปุ๋ยสูงเนิน : [Narisa.com: Up1] คุณมหศักดิ์ พิจิตรธรรม (ZCE:214599205) : [Narisa.com : Zelda] เรายังได้เชิญตัวแทนจาก Zend Technologies ประเทศสิงคโปร์ มาพูดคุยเรื่องราวเกี่ยวกับ Framework, Roadmap และได้เชิญผู้คร่ำหวอดในวงการ PHP ที่ตั้งบริษัทของตัวเองจนประสบความสำเร็จมามาแบ่งปันประสบการณ์ว่าท่านเหล่า นั้นทำได้อย่างไร อีกทั้งยังมี คุณวสันต์ ลิ่วลมไพศาล ผู้ก่อตั้งเว็บไซต์ Blognone.com มาแชร์ความรู้ในการเข้าถึงข้อมูลได้ง่ายกว่าด้วย PHP Data Object พร้อมด้วยกูรูจาก Ford AntiTrust มาเล่าเรื่องราวของ PHP Performance with APC + Memcached

ในงานไม่ใช่จะแต่สาระเพียงอย่างเดียว ยังมีความบันเทิงพบปะเพื่อนใหม่ พร้อมรับของที่ระลึก
ให้กลับบ้าน มาเถอะครับ กระชับวงล้อม ขยับเข้ามาช่วยกันสร้างชุมชนที่มีแต่มิตรภาพกันครับ

งานนี้เหมาะกับใคร ?

  • ผู้สุงวัยชาว PHP ที่ต้องการถ่ายทอดประสบการณ์
  • ชาว PHP ที่ต้องการหาอะไรใหม่ ๆ มาช่วยให้งานดูดี
  • มือใหม่ บุคคลที่สนใจ
  • นักศึกษาที่กำลังหาแนวทางในการทำ Senior Project หรือ กำลังงงว่าจะไปทางไหนดี
  • ชาว Dev ไม่มีที่จะไปและไม่มีใครชวนไปไหนในวันอาทิตย์

วันและสถานที่จัดงาน

วันอาทิตย์ ที่ 19 กันยายน พ.ศ. 2553
เวลา 9.00 ถึง 17.15 น. (ลงทะเบียนเวลา 9.00 ถึง 9.30 น.)
ชั้น 38 บริษัท ไมโครซอฟท์ (ประเทศไทย)

ค่าใช้จ่ายและการลงทะเบียน

ฟรี! ตลอดงานครับ มาแต่ตัวกับหัวใจ เราเตรียมอาหารกลางวันรสดี กาแฟรสเลิศ ของเสริฟในยามว่าง เราเตรียมไว้ให้ตลอดงานครับ ร่วมลงทะเบียนเข้างานเพื่อรับของที่ระลึกเก๋ ๆ ได้ที่นี่ครับ

หัวข้อภายในงาน

  • PHP Roadmap
    โดย Mr. Rama Yurindra, Zend Technologies Representative, Singapore
  • ธุรกิจสิบล้านกับงาน PHP แบ่งปันประสบการณ์ดี ๆ จากคนคอเดียวกัน
    ว่าสามารถสร้างธุรกิจให้ประสบความสำเร็จจาก PHP ได้อย่างไร

    โดย คุณศุภโชติ กาญจนกรทอง ผู้ก่อตั้งบริษัท 2Fellows Network and Design
  • Exploring a power of SQL Server and PHP
    โดย คุณฟูเกียรติ จุลนวล (Narisa.com: Fuju)
  • สร้างระบบ e-commerce ด้วย CodeIgniter
    โดย คุณสมเกียรติ ปุ๋ยสูงเนิน (Narisa.com: Up1)
  • PHP in Enterprise
    โดย คุณมหศักดิ์ พิจิตรธรรม (ZCE:214599205) : (Narisa.com : Zelda)
  • PHP Performance with APC + Memcached
    โดย Ford AntiTrust (Web Developer/Consultant, Database Consultant, Ubuntu Implementer, Blogger and Photographer)
  • เข้าถึงข้อมูลได้ง่ายกว่าด้วย PHP Data Object
    โดย คุณวสันต์ ลิ่วลมไพศาล ผู้ก่อตั้งเว็บไซต์ Blognone.com
  • Update Web Platform Installer และ Resource ฟรี ๆ
    จาก ไมโครซอฟท์ (ประเทศไทย)

    โดย คุณสงวน ธรรมโรจน์สกุล

รายละเอียดเพิ่มเติมอ่านได้ที่ http://www.microsoft.com/thailand/seminar/FY11Q1_port80bkk/

กรี๊ดดดด ได้ Zend Studio version 7.0 มาใช้ฟรี

ไม่รู้ไปทำบุญที่ไหนมา ได้ใช้ Zend Studio version 7.0 พร้อม support ฟรีอีก 36 เดือน (3 ปี) ราคา Zend Studio – 3 years of upgrade and support ก็ $ 717.00 ครับ

อาจจะเพราะผมไปร่วมด้วยช่วยกันทดสอบ Zend Web Application Server ที่ชื่อ “Zenith” เมื่อกลางปีที่แล้วก็ได้มั้ง ก่อนที่จะออกมาเป็น Zend Server ตัวล่าสุดนี้ (มี Version CE ด้วยนะ ไปลองโหลดมาใช้ดู ลองแล้วปรับแต่งและรวดเร็วใช้ได้เลย)

2009-08-19_065757

image

ใช้ Zend Debugger ยังไง (จาก Youtube)

มีคนถามผมมาทันควันหลังจากโพส blog entry ตั้งค่า Zend Optimizer กับ Zend Debugger ให้ทำงานพร้อมกันได้

งั้นผมก็ขออธิบานสักเล็กน้อยแล้วก็ดูว่ามันทำงานยังไงดีกว่า

Zend Debugger ระบบพื้นฐานในการทำ remote debugging หรือจะแปรให้มันเป็นไทยแท้ ๆ ก็คือ debug ตัว code ของ php แบบ realtime ในระหว่างการทำงานเลย โดยปกติแล้วเนี่ย เราจะใช้ความสามารถนี้ได้เมื่อลง Zend Core หรือ Zend Platform เท่านั้น แต่คราวนี้ไม่ต้องแหละ เมื่อนานมาแล้ว (จริง ๆ จะใช้ว่าเร็ว ๆ นี้ก็กะไรอยู่ เพราะว่ามันก็ไม่เร็ว ๆ นี้)  Zend ได้ปล่อยแยกออกมาต่างหากในชื่อ Zend Debugger หรือ server-debugger โดยปล่อยมาพร้อมกับ PDT (PHP Development Tools) หรือก็คือ IDE ของ PHP ที่ยกความสามารถของ Zend Studio ตัว IDE เสียเงินของ Zend ไปใส่ใน Eclipse IDE นั้นเอง โดยเป็นความร่วมมือของ Zend กับ Eclipse นั้นเองครับ โดยเมื่อไม่นานนี้ (ของจริง) Zend ก็ออก Zend Studio for Eclipse ที่เป็น version เสียเงินออกมาในคร่าต่อมาเหมือนกัน แต่ของดี ๆ ก็ยังคงอยู่ครับ โหลดได้ที่ http://downloads.zend.com/pdt/server-debugger/ ครับผม โดยผลจากการที่ปล่อยมาพร้อม ๆ กับ PDT ทำให้ PDT สามารถทำ remote debugging ได้โดยตรงเลย และฟรีด้วย เพราะ PDT เป็นตัว open-source อยู่ครับ หาโหลดได้ในเว็บ zend ลองหา ๆ ดูครับ

โดยวิธีการใช้งาน ผมไม่ขออธิบายดีกว่า ดู VDO เอาแทนน่าจะเข้าใจง่ายกว่ามั้งครับ ;P

eclipse php debugging with zend debugger

Eclipse PDT and Zend Debuger in action

PHP Debugger

ความคืบหน้า PHP Hoffman Framework

  1. ทำการ redesign ตัว clean url ใหม่อีกรอบ ด้วยการกลับมาใช้แบบเดิมเมื่อตอนออกแบบครั้งแรกคือ controller/action แทน ส่วนต้องการแก้ไข url ใหม่ ก็เพิ่มลงไปใน xml เอา
    โดย default คือ <map pattern=":controller/:action" />
    ถ้าต้องการใช้ user/login เป็น login เฉย ๆ ก็ <map pattern="login" action="user/login" /> แทนซะ หรือถ้าต้องการ rewrite ตัว url ที่มีการส่ง value ด้วยก็ <map pattern="news" action="page/show/1" /> แทนก็ได้เช่นกัน โดยในรุ่นต่อไปจะมี plugin เสริมสำหรับการ hook ตัว xml ตัวนี้ให้ไปใช้ database ได้ แบบเดียวกับ drupal แทนช้าลงและโหลด db มากขึ้น กำลังจุดลงตัวในส่วนนี้ โดย clean url นี้มีประสิทธิภาพเพิ่มขึ้นเยอะกว่าเดิมมาก และลดความซับซ้อนในการตั้งค่าลงไปเยอะด้วย แต่ต้องแลกกับความยืดหยุ่นบางส่วนไป แต่ถ้าว่า ok กว่าเดิมมาก ๆ ในตอนนี้
  2. หน้า error handler page นั้น ok แล้ว เพื่อดักข้อผิดพลาดในกรณีไฟล์ของ controller หรือ view ไม่มี รวมถึง arguments ไม่ครบเมื่อ controller ไป handle ตัว action
  3. ตัว config ไฟล์ใน .ini file และสามารถทำ inherit config ได้ด้วย เช่น
    [CODE]
    [production]
    database.default.type=mysql
    database.default.hostname=localhost
    database.default.username=root
    database.default.password=1234
    database.default.name=album

    [development : production]
    database.default.hostname = localhost
    database.default.username = root
    database.default.password = 1234
    [/CODE]
    เมื่อเราเลือก production เป็น environment มันจะไปดึงตัว config มาของ production มา แต่ถ้าใช้  development ก็จะไปดึงส่วนของ development ที่ override ตัว production มาใช้เท่านั้น ทำให้ลดการตั้งค่าลงไปเยอะ

  4. ในส่วนของ Model layer มี 3 ทางเลือกให้ extends มาใช้งานได้ คือ Zend_Db, Doctrine หรือ LogicModel (ตัวนี้ผมเขียนเอง สนับสนุนแค่ MySQL เท่านั้น) โดยใครถนัดแบบไหนก็ใช้แบบนั้นได้เลย เพียงแค่ตั้งค่าใน Model แต่ละตัวว่าจะใช้แบบไหน กำลังหาจุดลงตัวเพื่อให้เราสามารถใช้ Model ได้หลากหลายรูปแบบการ extends จาก 3 ทางเลือก บางครั้ง Model บางตัวอาจจะเหมาะกับ Doctrine มากกว่า 2 ตัวที่เหลืออะไรแบบนั้น และอาจจะรองรับการเขียนด้วย function mysql(i) เดิม ๆ ได้ด้วย โดยผมมองว่า Model นั้นเป็น Business logic ซึ่งควรมี performance สูงที่สุดในการเขียนและนำไปใช้งานครับ
  5. การส่งข้อมูลจาก controller ไปหา view นั้นใช้การ return ของ action ใน controller นั้น โดยการส่งข้อมูลแบบตัวแปรเดียวก็ได้ หรือส่งเป็น array ออกไปก็ได้ โดยส่งเป็น array จะทำการ fetch ข้อมูลให้ชั้นนึงเพื่อส่งผ่านเป็นตัวแปรนึงใน view ให้เลย โดยใช้การ map key เป็นชื่อตัวแปรใน dimension ที่ 1 ของ array ซะ
  6. พยายามเอา ORM หลาย ๆ ตัวมาใช้ร่วมกันใน Model เพื่อลดการยึดติดของระบบกับรูปแบบ ORM ของตัวใดตัวหนึ่ง
  7. ยังคงใช้ Zend แบบหลักในการพัฒนาระบบภายในเช่นเดิม

ตอนนี้โดยรวมพยายาปั้นตัวแรกออกมาให้ได้ก่อน เพื่อเอามารับคำติของทุกท่านครับ เพื่อเอามาพัฒนาต่อไปครับผม