[CI Day 6] มาใช้ Zend Framework ใน CI กันเถอะ
เอาล่ะ หายหน้าหายตากันไปนาน ก่อนอื่นก็ขอ “สวัสดีปีใหม่” กันก่อน ปีใหม่นี้เริ่มเข้ามาก็มีแต่เรื่องเศร้าละ หลายคนที่ติดตามข่าว คงจะได้รับรู้เหตุการณ์ที่ ไฟใหม่ “Zantika Pub” ก็เป็นเหตุการณ์ที่ไม่น่าเกิดขึ้นเลยจริงๆ ก็ขอแสดงความเสียใจ กับผู้ที่สูญเสีย ในเหตุการณ์ครั้งนี้ รวมไปถึงครอบครัว ของผู้เสียชีวิตด้วยนะครับ อย่างน้อยเรื่องในครั้งนี้ น่าจะเป็นอุธาหรณ์ ให้กับผู้ประกอบการสถานบันเทิงในบ้านเรา ให้เก็บเอาไปทำการบ้านเพิ่มเติม ในเรื่องของความปลอดภัย มากกว่าที่จะคำนึงถึงแต่ ผลประโยชน์ส่วนตัว หรือ พรรคพวก กันแต่อย่างเดียว ไหนๆ ได้เงินเค้ามาจากธุรกิจ ที่มอมเมา แล้วเสียเงินไปอีกนิดกับความปลอดภัยให้แก่ ผู้บริโภคบ้าง คงไม่ถึงกับหนักหนา อะไรนักนะครับ
อืมม์ นอกเรื่องไปพักนึง ทีนี้กลับเข้ามาสู่เรื่องของเราดีกว่า เรื่องที่จะพูดในวันนี้ จริงๆ แล้วก็ไม่ได้เกี่ยวกับ CI โดยตรงนัก แต่จะเป็นการนำ Framework ชุดอื่นมาผสมผสาน ความสามารถให้แก่ CI เพื่อให้ใช้งานได้ดียิ่งๆ ขึ้น ก็จะมากล่าวถึง Zend Framework กัน ซึ่งตัวนี้เท่าที่ลองหาข้อมูลมา เป็น Framework ที่ต่างประเทศ ให้ความสนใจกันมาก เพราะนอกจากความสามารถจะครบครันแล้ว ยังมี Community ที่แข็งแกร่ง และก็เชื่อถือได้ นั่นก็เพราะว่า ผู้ให้กำเนิดมันเป็น กลุ่ม “Zend” ซึ่งพัฒนา ภาษา PHP โดยตรง
แต่เนื่องจากนี่เป็น บทความของ CI ไม่ใช่ ZF ผมจึงไม่ขอกล่้าวในส่วน การ Implement ZF แต่จะพูดถึงการเอาความสามารถที่มีอยู่ของมัน ไปต่อยอดให้กับ CI ของเรา สำหรับใครที่สนใจจะศึกษา ลองไปดูในส่วน Docs ของเค้าก่อน แนะนำให้ดูจาก Video ก่อนนะครับ ไม่งั้น งง เป็นได่ตาแตก เพราะว่าหลังจาก Download มา เค้าไม่ได้เขียน Core ในส่วน MVC มาให้มีแต่ Libraries ล้วนๆ
ซึ่งข้อดีหลักๆ ของ ZF ก็คือ มี libraries ที่เยอะ และค่อนข้างมีประโยชน์ หลายตัว เช่น ACL (Assess control listl), DOM (Document object model), OpenID, PDF, APIs, Soap และที่สำคัญมี jQuery ด้วยล่ะ Good Job!
การ Plug ZF นั้นแตกต่าง จากการ plug library แบบปกติ เพราะเนื่องจาก ตัวขอ Zend เองก็จะมี การ include core หลักๆ ที่อยู่ใน Folder ของตัวเองลงไป และเพราะสาเหตุนี้แหละ ถ้าเราจะทำการ plug แบบเดิม คงจะต้องก้ path include กัน ไม่ได้หลับได้นอแน่ๆ เราก็เลยต้องมา set include path กันใหม่ โดยมีตัวช่วยคือ Hooks นั่นเองครับ มาดูวิธีกันเลยดีกว่า
ก่อนอื่นไป Download Zend Framework มาก่อน
จากนั้นมาทำตามขั้นตอนกันไปทีละข้อเลยนะึครับ
1. สร้าง Dir ที่ application ของ CI ในตัวอย่างผมจะสร้าง folder ชื่อว่า extlibs ตามนี้
[CI]/application/extlibs/
2. จากนั้นนำ Core ของ Zend ทั้งหมดมาวาง ก็จะได้ออกมาเป็น
[CI]/application/extlibs/Zend/
3. ไปทำการ Config hooks ที่
[CI]/application/config/hooks.php
ตามนี้
-
‘class’ => ‘ExLibs’,
-
‘function’ => ‘index’,
-
‘filename’ => ‘ExLibs.php’,
-
‘filepath’ => ‘hooks’
-
);
-
?>
4. แล้วไปเขียน class ตามที่เราเรียกใช้ ที่
[CI]/application/hooks/ExLibs.php
ตามนี้
-
<?php
-
class ExLibs {
-
-
function index()
-
{
-
// ถ้าใช้ unix server ให้เอา comment ที่บรรทัดนี้ออก แล้วไป comment ข้างล่างแทน
-
#ini_set(‘include_path’,ini_get(‘include_path’).’:’.dirname(FCPATH).’/application/exlibs/’);
-
// ถ้าใช้ windows server ให้ ใช้ตามนี้ได้เลย
-
}
-
-
}
-
?>
เท่านี้ path include ก็จะถูกชี้มาที่ Folder ที่ extlibs แล้ว แต่ไม่ต้องห่วง การ include จะมองแบบเดิมเพี้ยน “ไม่มีผลครับ”
เท่านี้เราก็จะสามารถใช้งาน Zend Framework ได้อย่างปกติสุขแล้ว ลองมาดูสักตัวอย่าง ที่ Controllers ผมไปสร้าง zend มาสักไฟล์เพื่อเทส
zend.php
-
<?php
-
class Zend extends Controller {
-
-
function __constuct()
-
{
-
parent::Controller();
-
}
-
-
function twitter()
-
{
-
// Doc: http://framework.zend.com/manual/en/zend.service.twitter.html
-
require_once(‘Zend/Service/Twitter.php’);
-
$twitter = new Zend_Service_Twitter(‘YOUR_ACCOUNT’, ‘YOUR_PASSWORD’);
-
-
$response = $twitter->status->userTimeline();
-
}
-
-
}
-
?>
แล้วลองเรียก
[CI]/application/zend/twitter
เท่านี้ผมก็จะได้ข้อมูล Twitter ใน Account ผมมาเพื่อทำการแสดงแล้ว
Notice: อย่าลืมแก้ไข user, password ให้เป็น account ของคุณเองก่อน
และถ้าอยากลอง libraries อื่นๆ ก็ไปอ่านเอาได้ที่ manual ของ ZF เองเลยครับ เท่านี้ก็เท่ากับคุณ สามารถใช้งาน Libs ของ zend ได้อย่างเต็มที่ แล้ว ทำได้แบบนี้จะต้องการอะไรอีกล่ะ จริงมั้ย?
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
สวัสดีครับพี่
ก่อนอื่นต้องขอชื่นชมพี่มากครับที่พี่ทั้งเก่งและไอเดียดีมาก ผมมีเรื่องปรึกษาครับพี่ ผมมีเวลาสองเดือนที่จะต้องใช้ ci ในการทำเว็บ Ecommerce ให้อาจารย์ครับ โดยอาจารย์ได้แนะนำให้ศึกษา ผมใช้เวลาศึกษามาพักใหญ่แล้ว แต่ว่ายังคงติดที่ว่า แนวทางในการพัฒนา เมื่อก่อนผมใช้ php nuke ครับ แต่เมื่อต้องมาทำเอง แก้ไขเอง เลยยากหน่อยเพราะว่าไม่แน่นเรื่องการเขียนโปรแกรม พี่พอจะแนะนำ ตัวอย่างของ ci ที่ เขียนแบบ Ecommerce ได้มั๊ยครับ ถือเป็นพระคุณอย่างยิ่งครับ ทุกอย่างต้องมีการเริ่มต้น และกาเริ่มต้น ที่มีตัวอย่างและข้อมุลครบถ้วนก็น่าจะดีมากใช่มั๊ยครับ
คือผมทำโปรเจคจบเป็น app ที่จะเอาไว้ใช้บน hi5 อะคับ
บังเอิญผ่านมาเห็นบล๊อกนี้มีตัวอย่างการเอา api ของ Hi5 มาใช้
ผมเองก็ต้องใช้เหมือนกัน แต่ผมไม่ค่อยมีความรู้เรื่องการใช้ api อะครับ
ผมลยอยากจะขอคำปรึกษา
รบกวนขอ Email ได้มั้ยครับผม ตอนนี้ผมกำลังเครียดมากจริงๆ กลัวไม่เสร็จอะคับ T-T
CI+Zend Framework นี้มันสุดยอดจริงๆ
[...] ถ้าจะให้ผมพูดถึงทุกตัว วันนี้ผมคงไม่ได้นอนเป็นแน่ [0.17] ก็จะขอพูดถึง เรื่องที่จะเขียนเลยแล้วกัน นั่นก็คือ REST Protocol ครับ โดยที่จะใช้ Zend มาเป็น Core Lib ในการทำงาน [ถ้าใครยังไม่เคย plug Zend ลงใน CI ไปอ่านบทความย้อนหลังครับ] [...]
อาาาาา เขียนเอาไว้เผื่อว่าใครมาอ่าน แล้ว รันไม่ผ่านอะครับ
คือว่า พี่เขียนชื่อโฟลเดอร์ที่ให้สร้างตอนแรก (extlibs) ไม่เหมือนกับที่ให้ include อะครับ (exlibs)
เขียนแบบถึกๆ มาซะนาน ตอนนี้อยากลอง Framework ซักตัว CI ตัวนี้แหละที่ต้องการ ขอบคุณมากมาย บทความมีประโยชน์มากครับ
ของผม มัน Error ครับ บอกว่า:
Fatal error: Home::require_once() [function.require]: Failed opening required ‘Zend/Service/Twitter.php’ (include_path=’.;C:\php5\pear;C:\Document\AppServ\www/application/exlibs/’) in C:\Document\AppServ\www\Codeigniter\application\controllers\home.php on line 22
เพราะว่า มันผิด path
ให้แก้เป็น ini_set(‘include_path’,ini_get(‘include_path’).‘;’.FCPATH.‘/application/exlibs/’);
เสริมให้นิดนึ่งครับ ที่ file [CI]/application/hooks/ExLibs.php
function index(){
if (stristr(PHP_OS, ‘WIN’)) {
// Win
ini_set(‘include_path’,ini_get(‘include_path’).’;’.dirname(FCPATH).’/application/exlibs/’);
} else {
// Other
ini_set(‘include_path’,ini_get(‘include_path’).’:’.dirname(FCPATH).’/application/exlibs/’);
}
}
PHP_OS < เป็น function ตรวจสอบ os server
ไอ้ตรงนี้ผมแก้ออกแล้วครับ แก้เป็น
ini_set(‘include_path’, ini_get(‘include_path’).PATH_SEPARATOR.APPPATH.’classes’);
[...] มาใช้ “Zend Framework ใน CI กันเถอะ” แล้วทำให้ได้ตามตัวอย่างซะก่อน [...]