[CI Day 0] ทำความรู้จัก กับ PHP Framework และ Codeigniter

ตอนแรกก็ตัดสินใจอยู่นาน ที่จะเปิด Blog ใหม่ มาเขียนเกี่ยวกับเรื่องนี้ หรือว่า จะเขียนใน Sub-domain ดี แต่คิดไปคิดมา ถ้าทำแบบนั้น ผมคงไม่ได้อัพเดท บล๊อกใดบล๊อกนึงแน่ๆ เลยเอามันรวมๆกันนี่ล่ะ โดยการแยก Category เอา ถึงชื่อ Domain มันจะเป็น jQueryTips ก็เหอะ แต่ อยากเขียนสิ่งที่ชอบอื่นๆ ด้วยนี่หน่า

หลายๆ คนที่ติดตาม jQueryTips มาจนถึงตอนนี้ คงจะคิดว่าผมคงเขียน Javascript เป็นหลัก แน่ๆ เลย แต่ผิดแล้วครับ นั่นมันงานอดิเรก งานที่ผมเขียนมาตลอดคือภาษา PHP ครับ โดยลองเปลี่ยนรูปแบบสไตล์การเขียนมาหลาย ลักษณะ ทั้งแบบ Structure แบบ OOP ก็ยังไม่ลงตัวสักที จนมาเจอในที่สุดว่า เราน่าจะเหมาะกับ MVC ก็เลยหา Framwork ที่เหมาะๆ มือมาสักตัว ก็เลยลองผิดลองถูกจนมาเจอ สไตล์ที่เหมาะกะตัวเองครับ นั่นก็คือ Codeigniter นั่นเอง

แต่ต้องบอกไว้ก่อนนะครับ ที่จะเขียนต่อๆ ไปไม่ได้เกี่ยวกับ CI เพียงอย่างเดียว ไม่ได้เอา Manual มาแปล แล้วเขียนๆ แต่จะเอา สูตรสำเร็จที่ลงตัว สำหรับคนที่จะยึดอาชีพ Developer มาแผ่กันถึงกึ๋นเลยทีเดียว

โดยส่วนผสมที่จะต้องเตรียมศึกษามาก็จะมีดังนี้ครับ

Codeigniter
อันนี้จะเป็น Frame ที่ครอบของทั้งหมด ถือเป็นหัวใจเลยก็ได้

Zend Framework
อันนี้จะเอามาคลุกรวมกับ CI เพื่อขอยืมใช้ Libraries บางตัว เท่านั้น

Smarty Template Engine
อันนี้จะเอามาแทน View อันเดิมที่ไม่ได้เรื่อง ของ CI

ADODB
ตัวนี้จะเอามาแทน Libraries ชุด DB เดิมของ CI

jQuery
ตัวนี้จะเอามาทำงาน กับ JS ทั้งหมด

Mod Rewrite
เนื่องจากตัว Framework เป็น การเขียนแบบ Rewrite URL ทั้งหมด ยังไงก็ควรจะศึกษาไว้สักนิด

สำหรับคนที่ยังไม่มีพื้นฐานอะไรที่บอกมาเลย ก็ไม่ต้องกังวลไป ขยับมาใกล้ๆ เดี๋ยวผมจะค่อยๆ เล่าให้ฟังเอง…

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

สำหรับ Framework ผมต้องบอกก่อนว่า อย่าเอาไปรวมกับ CMS เพราะมันไม่ใช่! มันต่างกันแบบไม่เหมือนกันเลย ที่ต้องบอกก่อน เพราะว่าหลายๆ คนยังไม่คุ้นกับ Framework เลยมักจะเกิดความเข้าใจผิดว่ามันคือ CMS ที่ทำมาพร้อมใช้ แบบเปิดฝา กินได้ทันที

CMS:: มันคือ Software ครับ ซึ่งการทำงานของมันก็ไม่มีอะไรซับซ้อน แค่ install แบบ click 1 2 3 แล้วก็เสร็จพร้อมใช้งาน มีหน้าตา มีระบบ พร้อม อย่างเช่น Wordpress ที่ผมกำลังเขียนอยู่นี่ ก็ถือเป็น CMS ตัวนึง

ซึ่งสำหรับ CMS แล้ว ใครมาใช้ก็ได้ครับ ไม่ต้องเป็น Developer แค่มีความรู้ IT บ้างก็พอที่จะใช้งานมันได้แล้ว แน่นอนครับ มันสะดวก แต่ ไม่ยืดหยุ่น ไม่สามารถทำได้อย่างใจนึก อย่างที่อยากจะให้ออกมาเป็น

Framework:: มันคือ ชุดพัฒนาครับ เป็นแค่ Tool ที่พร้อมจะให้เราพัฒนา ต่อไปซึ่งมันไม่สามารถหยิบมาใช้งานได้ทันที แต่จะต้องลงมือ Cook ก่อนครับ เปรียบไปก็เหมือน พวก เครื่องปรุง พวก ปลา เนื้อ ที่เราจะต้องทำออกมาเป็น อาหารเอง เพียง แต่ มันสะดวกกว่าการเขียนตั้งแต่แรก คือ เราไม่ต้องออกไป ปลูกผัก หรือจับปลาเอง นั่นแหละ

แล้วข้อดีของมันล่ะ ต่างจากนั่งเขียน PHP ธรรมดาๆ ยังไง?

ข้อดีของมันนั้นมีเยอะครับ อย่างน้อยก็เยอะกว่าข้อเสียแหละ เท่าที่ผมพอจะ list มาให้ได้ก็พอจะคิดออกเท่านี้
1. เหมาะมากๆ กับการพัฒนา Application ที่มีทีม พัฒนา เพราะมันมีการทำ structure ที่ดีพร้อมไว้แล้ว คนที่มาพัฒนาต่อ สามารถเข้าใจได้ทันที ว่าอะไรอยู่ตรงไหน ควรจะเอางานตัวเองไปใส่ไว้ที่ไหน

2. ทำให้ไม่เสียเวลาพัฒนาซ้ำ เพราะว่าทุกอย่างที่ Developer ทำงานไว้ share กันได้ตลอดเวลา เพราะเรารู้ว่า อะไรมันอยู่ตรงไหน developer ที่มาทำงานต่อจะไม่ งง เลย จะเข้าใจได้ทันทีเพราะมี structure ที่ดีอยู่แล้ว

3. ไม่ต้องเขียน function อะไรที่เป็นการสร้างขยะ ให้กับ application เช่น เดี๋ยวคนนึงเขียน insert สำหรับ user คนนึงเขียน insert สำหรับ admin เพราะว่า model สามารถ re-used ได้อย่างเป็นระบบ

4. มีชุด libraries และ helpers มาบ้างทำให้ไม่ต้อง develop ตั้งแต่ 0

5. แยก coding ออกจาก template ทำให้แก้ไขได้ง่าย ไม่ จำเป็นต้องรื้อโคด เวลา fix งาน

6. มีการวาง structure แบบ url friendly สนับสนุน SEO

7. การแก้ไขหรือ พัฒนาต่อแบ่ง Phrase ได้ง่าย เพราะว่า งานมีระบบ อะไรๆ มันก็จะดูง่ายไปหมด

8. ไม่มีอะไรจะพูดละ แต่จะบอกว่า framework นี่ล่ะ คือ สวรรค์ ของนักพัฒนา จริงๆ

เอาล่ะ แล้วทำไมต้อง CI ทำไมไม่เป็นตัวอื่น?

จริงๆแล้ว PHP มี Framework อยู่มากเลยครับ หลายตัวมากๆ เป็นสิบเลย ดังๆ ดีๆ มีจุดเด่นกันคนละแบบ แต่ที่ผมเลือก CI เพราะว่ามันค่อยข้างจะ ยืดหยุ่น และดัดแปลงได้ง่ายกว่าตัวอื่น และไม่มี Overhead สูงมากนัก

เรื่องการทำงานล่ะ ช้ามั้ย?

อันนี้ ค่อนข้างแน่นอนครับ ว่ามันช้ากว่า PHP เพียวๆ แน่นอน เพราะมันมี การ autoload งานบางส่วนเข้ามา แต่มันก็เป็นแค่ ลักษณะ ของ pointer เท่านั้น และถ้ามองกันในระดับ สากล เวบระดับโลกไหนๆ ก็มี framework ทั้งนั้น แต่ว่า มักจะเขียน framework ของตัวเองขึ้นมา เพราะไม่งั้นเราไม่สามารถ ที่จะ ควบคุมงานได้เลย และ ปูพื้นให้กับ application ได้เลย

และถึงเราจะบอกว่า มันช้ากว่าก็จริง แต่ผมก็มีวิธีแก้ สารพัด ครับ ไม่ว่าจะการ ทำ Cache Query, Cache Static, Reverse Proxy, Memecache ไม่ได้ปล่อยมัน Process ด้านๆ ตลอดเวลาแน่นอน ซึ่งเรื่องพวกนี้ เราจะค่อยๆ มาศึกษาไปพร้อมๆ กันครับ

พูดกันถึง CI?

CI เป็น Framework ในลักษณะ MVC ก็คือจะแบ่งโครงสร้างออกเป็น Model View และ Controller ซึ่งทั้ง 3 ตัวนี้ก็จะทำหน้าที่ต่างกันไปดังนี้

Model – จะเป็นตัวคำนวน Logic ต่างๆ รวมไปถึงการทำงานกับ Database เพื่อ รับและส่งค่า กับ Controller

View – จะเป็นตัวแสดงข้อมูลเท่านั้น เป็นส่วนที่เราจะใช้ Render Output HTML ออกมา จะไม่มีโคดที่ต้องคำนวนอะไร อยู่ในนี้อีกแล้ว (กรุณาอย่าเอา Coding ไปเขียน มันไม่โปร)

Controller – ส่วนนี้จะเป็นส่วนที่ทำการเชื่อมระหว่าง M และ V รวมไปถึงคำนวน Logic ง่ายๆ เช่นการ Validate ค่าจาก Form การทำ Upload File ซึ่งตัวนี้คือ หัวใจในการทำงานของ แต่ละ Module เลยก็ว่าได้

ที่เหลือก็จะเป็นส่วนผสมต่างๆ ที่เราจะสามารถนำมาใช้งานได้ทันทีจะถูกแบ่งออกเป็น

libraries – Class ต่างๆ สำเร็จรูปที่ CI เตรียมไว้ อาทิเช่น Form_validation, Pagination, Xmlrpc, Email, etc.

helpers – Function ของ PHP ที่เขียนจะถูกแบ่ง อย่างเรียบร้อยและเก็บไว้ที่นี่ อาทิเช่น file, date, cookie, array

config – ค่า Config ที่เราจะเรียกมาใช้งานให้กับ Application ของเราจะถูกสร้างและเก็บไว้ที่นี่

errors – error templates

hooks – ส่วนค่าที่จะทำการเรียกมาใช้งาน ช่วงต่างๆของ app เรียกว่า Trigger คงจะเข้าใจกันง่ายกว่า

language – ชุดภาษาของ app เราจะนำมาเก็บไว้ที่นี่

logs – เอาไว้เก็บ log ของ app เท่านั้น

scaffolding – เอาไว้ manage DB แบบ ตารางเดียว สดๆ มีหน้าที่ไว้ให้ Developer test งาน เท่านั้นแหละ ไม่ได้ถูกเอามาใช้งานจริงๆ จังๆ

plugin – ชุดทำงานสำเร็จรูป เช่น พวก Calendar, Captcha อันนี้ผมให้ความสำคัญมันค่อนข้างต่ำ

font – ตาม Structure ที่ผมวางไว้ ผมย้ายมันไปที่อื่นแล้ว ลืมมันไปเถอะ

cache – เอาไว้เก็บ cache ที่เกิดจาก logic ของเรา (มันเป็น flat file cache)

เอาล่ะๆ เท่านี้ก็น่าจะหมดแล้วทีนี้ เรามาเริ่ม กันเลย ก่อนอื่น Download ชุด Framework มาก่อน แล้วนั่งศึกษาเล่น รอบทความครั้งหน้า 555+

เอาล่ะ แล้วครั้งหน้าผมจะมาแนะนำการติดตั้ง แต่ถ้ายังไม่อยากรอนาน ก็นั่งดู User Guide ไปก่อนละกันนะ บาย.

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.

14 Comments »

 
  • figaro says:

    ไม่ทราบว่าจะขอตัว package ที่คุณ Tee++ นำ

    Zend Framework,
    Smarty Template Engine,
    ADODB

    รวมเข้าไปใน package แล้วได้มั้ยครับ ผมอยากศึกษาวิธีของพี่ ว่าจะเพิ่ม class เข้าไปให้ Codeigniter ยังไง เพราะผมลองทำแค่ใช้ ADODB include เข้าไปตรงๆเลย

    ขอบคุณครับ

  • JoJo says:

    รอติดตามอยู่ครับ ^^

  • siamjung says:

    ขอบคุณมากครับ สำหรับบทความดีๆ

    ตอนนี้ใช้แต่ smarty กับ adodb

    เดี๋ยวว่างๆจะลองหัดใช้ดูครับ

  • au8ust says:

    เจ๋งครับ

  • zunkz says:

    กว่าจะ ศึกษา หมด หัวบานกันพอดี ผมชอบแต่ adodb อิอิ

    ชอบม๊ากก

  • chaiyut says:

    ขอบคุณครับ คุณตี๋ บทความดีๆ ต้องศึกษาเยอะ กว่าจะเก่งคงโดนปลดระวางก่อน เพราะบ้านเราไม่ค่อยชอบจ้าง Web Programmer ที่อายุเกิน 30 เศร้าใจจริงๆ เลย

  • อยากศึกษาเหมือนกันคับ จะรออ่านจนจบเลยคับ บทความดีๆ ชอบมาก มีประโยชน์

  • P@W says:

    เป็นข้อมูลที่ดีมากครับ กำลังจะดู ๆ อยู่พอดี

  • DominixZ says:

    เด็ก CI อีกคนแล้วครับ :D

  • Some says:

    ดููเทรนในเมกาว่า php framework ตัวไหนฮิตครับ

    http://google.com/trends?q=CodeIgniter%2C+cakephp%2C+symfony&ctab=0&geo=US&date=all&sort=0

  • peglui says:

    หน้าใหม่ ไม่รู้เรื่องCI อะไรมาเลย ขอพึ่งบทความนี้ละนะครับ เป็นจุดเริ่มต้น

    แล้วจะรีบตามไปครับ แ้ล้วจะรออ่านทุกบทความครับผม ^^/

  • Hyde says:

    ข้อมูลน่าสนใจมาก แต่ขาดพวกภาพประกอบไปเยอะ

  • Tee++; says:

    ขี้เกียจครับ ขืนต้องมาคอยนั่งเขียน นั่ง capture ชีวิตนี้ไม่ได้ทำงานทำการกันพอดี เขียน blog ขำๆ เป็นงานอดิเรกครับ

  • preav says:

    กำลังเริ่มครับ

 

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>