บทเรียน Yii Framework

User Rating: 3 / 5

Star ActiveStar ActiveStar ActiveStar InactiveStar Inactive

มาทำความรู้จัก Yii Framework กัน

ก่อนอื่น Yii (จะอ่าน หยี่ แบบไทย หรือ ยี ตามสำเนียงฝรั่งก็แล้วแต่ครับ) เจ้า Yii เป็น PHP Framework อาจจะค่อนข้างใหม่ สำหรับ php programer ผมรู้จัก Yii เมื่อสองสามปีก่อน ตอนลองเล่นครั้งแรกก็รู้สึกแปลกใจ นิดหน่อย คือ เจ้า Yii Framework มันจะมาแปลกว่า Framework ตัวอื่นๆ คือมันจะแถมโปรแกรมเป็นที่รันด้วย command line ซึ่งมีทั้งเวอร์ชั่น สำหรับ linux และ windows เอาไว้สำหรับ gen โค้ดต้นฉบับ สำหรับงานของเรา เรียกได้ว่าสร้างระบบอะไรเล็กๆ ขึ้นมาซักอย่างภายใน 5 นาทีก็ว่าได้ แต่ตอนนั้นด้วยความใหม่ลองมัน และความซับซ้อนของงานทีทำอยู่ ผมก็เลยยังไม่ได้ศึกษาอย่างจริงจัง มาถึงตอนนี้ Yii เป็น Framework ที่ได้รับความนิยมสูงมากในต่างประเทศ และในไทยก็เริ่มมีคนใช้เยอะขึ้นเรื่อยๆ (ถ้าคุณอ่านและลองเอาไปใช้ก็จะเพิ่มขึ้นมาอีก 1 คนง่ะๆ)  และ จากการจัดอันดับ Framework ที่ชื่นชอบ เ้จ้า Yii ก็เป็นที่หนึ่งในหลายๆ เว็บ แต่สำหรับผม ที่หนึ่งในใจ ก็ ยังเป็น Zend Framework อยู่ Sealed รองลงมาคือ Joomla Framework เข้าเรื่อง Yii กันต่อนะครับ
Yii Framework Logo
Yii is a high-performance PHP framework best for developing Web 2.0 applications.

Yii Framework
 - ออกตัวครั้งแรก เมื่อ  ปี 2008
 - ปัจจุบันตอนที่เขียน บทความนี้ Yii Framework อยู่ที่เวอร์ชั่น 1.1.7 และ มีเวอร์ชั่น 2.0 (อยู่ในระหว่างการพัฒนาซึ่งจะใช้กับ php 5.3)
 - ได้แนวคิดในการออกแบบและพัฒนาจาก Framework อื่นๆหลายตัว เรียกว่า Framework ตัวไหนมีเด่นตรงไหน Yii Framework ก็มีแบบเดียวกันเลย ซึ่งโดยหลังๆ แล้ว Yii Framework เอาแนวคิดมาจาก

  • PRADO ( Yii เอาจุดเด่นเรื่อง component-based and event-driven programming framework มาใช้ ) และ เรื่อง database abstraction layers ไว้สำหรับจัดการกับฐานข้อมูล และอื่นๆ อีกมากมาย
  • Ruby on Rails สำหรับทำ active record 
  • jQuery Yii จับยัด เจ้า jQuery มาให้เราใช้เสร็จสับ...
  • Symfony เอาแนวคิดเรื่อง ยัด Plugin ใส่ Framework
  • Joomla เรื่อง modular design และ message translation scheme

Yii Framework License เป็นแบบ BSD เช่นเดียวกับ Zend Framework 
ของดีของ License แบบนี้สำหรับนักพัฒนาคือ มันฟรีแบบ เปิดให้ใช้ได้อย่างเสรี ทั้งใช้ในการทางค้าและไม่ใช่ทางการค้า

User Rating: 2 / 5

Star ActiveStar ActiveStar InactiveStar InactiveStar Inactive

ความสามารถ เด่น ของ Yii Framework

ตามที่เค้าแนะนำไว้ที่เว็บ Yii Framework  นะครับขอใส่ความเห็นเข้าไปนิดหน่อย

  • ถูกออกแบบภายใต้แนวคิด Model-View-Controller (MVC) design pattern ซึ่งเป็นแนวคิดการพัฒนาโปรแกรมที่แพร่หลายในปัจจุบัน เพราะ สามารถแยกส่วนการพัฒนากออกได้เป็นส่วนๆ
  • ใช้งานกับฐานข้อมูลได้หลากหลาย โดยไม่ต้องเขียนคำสั่ง sql ด้วย Database Access Objects (DAO), Query Builder, Active Record, DB Migration แต่ความสามารถนี้บางครั้งผมรู้สึกว่าไม่ค่อยสะดวกเท่าไร (เพราะติดเขียนคำสั่ง sql เอง ง่ะๆ)
  • สร้าง ฟอร์มและยืนยันความถูกต้องของข้อมูล โดย Form input and validation ถายในตัวไม่ต้องทำหน้าฟอร์มหลายหน้าเพื่อแสดงข้อผิดพลาด
  • เครื่องมือสำหรับใช้ AJAX ในงานเรา AJAX-enabled widgets ซึ่งตรงนี้ Yii Framework เอา jQuery เข้ามาใช้จุึดเด่นตรงนี้โดยส่วนตัวผมชอบมากและจุดนี้ถือเป็นจุดเด่นมากๆ ของ Yii Framework ด้วย (Zend Framework เวอร์ชั่นปัจจุบันก็จะทำแบบนี้ได้แล้วด้วย (หลังจากคงไม่ประสบความสำเร็จกับ Dojo) ) ...
  • ทำให้งานของเราเป็นหน้าตาการแสดงผลได้ ด้วย Skinning and theming
  • จัดการกับข้อความผิดพลาดและ เก็บข้อความแสดงผลต่าง ด้วย Error handling and logging
  • มีระบบเรื่องความปลอดภัย ด้วย Security ป้องกัน SQL injection cross-site scripting (XSS), cross-site request forgery (CSRF), and cookie tampering. เรียกว่ามากันครบกับป้องกันพวก Hacker
  • มี Unit and functionality testing โดยใช้ PHPUnit และ Selenium.
  • Automatic code generation ตรงนี้ต้องเน้นตัวหนาหน่อย เพราะช่วยให้เราเริ่มสร้างงานได้เร็วมาก เพราะเจ้า Yii Framework เล่นสร้าง form input และ จัดการ เพิ่ม-ลบ-แก้ไข-ดู ข้อมูลจากฐานข้อมูลให้เราเองเลย
  • output เป็นไปตามโครงสร้าง XHTML
  • เอา Framework หรือ โค้ด อื่นๆ เข้ามาใช้งานได้ง่าย Friendly with third-party code เช่นเราจะเอา Zend เข้ามาร่วมด้วย ก็ได้
  • มีเอกสารให้ศึกษาเยอะ ทำความเข้าใจไม่ยาก
  • มี Extension library ซึ่งเพิ่มความสามารถหลักของ core ของ Yii Framework เข้าไปอีก
  • และยังมีมีหลายอย่างต้องลองดูแล้วครับ

 

User Rating: 3 / 5

Star ActiveStar ActiveStar ActiveStar InactiveStar Inactive

เริ่มใช้ Yii Framework  สอนการใช้งาน Framework  ตัวเล็กและเร็ว Framework สำหรับ Web 2.0

ก่อนอื่นต้องสำรวจเครื่องเราและตัวเรากันก่อน ว่าพร้อมสำหรับ Yii Framework หรือเปล่า
  • เครื่อง ต้องเป็น php 5.1 เป็นต้นไป 
  • ต้องมีความรู้ php พอสมควร
  • ตัวเราต้องมีความรู้ MVC
  • ตัวเราต้องมีความรู้ การเขียนโปรแกรม OOP
ถ้าพร้อมแล้ว มาเริ่ม Yii Framework กันเลยครับ
1. โหลด Yii Framework ที่ http://www.yiiframework.com/download/ เลือกเอาเวอร์ชั่นที่ Stable นะครับ
 (ขณะเขียนบทความนี้ เวอร์ชั่น 1.1.7 - yii-1.1.7.r3135.tar.gz)
2. โหลดเสร็จแตกไฟล์ไว้ folder ใน htdocs  เช่น ผมเอาไว้ใน Yii_mindphp (ขนาดไฟล์รวมทั้งหมดที่ unzip แล้ว ประมาณ 15MB)
จะได้โครงสร้างไฟล์ ตามรูป
Yii Framework โครงสร้าง folder
จะเห็น folder หลัง 3 folder คือ demos, requirements, framework
  • โฟลเดอร์ demos จะเป็นตัวอย่างงาน ที่สร้างมาจาก Yii Framework เอาไว้สำหรับให้เราได้ศึกษา
  • โฟลเดอร์ requirements เป็นตัวทดสอบของ Yii ว่าเครื่อง หรือ ระบบของเราพร้อมสำหรับใช้งาน Yii framework หรือไม่ ดูต่อที่ข้อ 3 นะ
  • โฟลเดอร์ framework จะเป็นที่เก็บไฟล์ต่างๆ ของ Yii Framework โฟลเดอร์ นี้สำคัญห้ามลบหรือแก้ไขไฟล์ใดๆ นะครับ
3. ใช้ Browser เข้าไปที่ http://localhost/yii_mindphp/requirements/ จะได้หน้าจอดังรูป
Yii Framework requirements check
ถ้าไม่มีสีแดงขึ้นก็แสดงว่า เครื่องเราพร้อมสำหรับ Yii framework แล้วครับ สามารถลบ โฟลเดอร์ไปเลยก็ได้
4. เริ่มศึกษา Yii Framework กันเลยครับ โดยจะศึกษาจาก โฟสเดอร์ต่างๆ ใน demos ก็ได้ แนะนำให้ศึกษาโครงสร้าง จาก helloworld เพราะจะง่ายที่สุด ส่วน โฟสเดอร์ phonebook จะยากที่สุด และได้นำ Flex เข้ามาใช้งานทำหน้า form ด้วย

5. สร้าง web application โดยใช้ Yii Framework
 - เปิด Command (สำหรับ win XP เข้าไปที่ Start >> run พิมพ์ cmd ) เปลี่ยนตำแหน่งแหล่งไปที่ โฟสเดอร์เก็บ Yii Framework ของเรา
เช่นของ ผม cd เข้าไปที่
D:\xampp\htdocs\Yii_mindphp\framework>
พิมพ์ Command เพื่อสร้าง web application ของเราตามนี้ สมมติ สร้างงานชื่อ myapp_mindphp

yiic webapp D:\xampp\htdocs\Yii_mindphp\myapp_mindphp

ถ้าขึ้นข้อความ Error ประมาณนี้

'"php.exe"'' is not recognized as operable program or batch file.

ให้เข้าไปแก้ไฟล์ D:\xampp\htdocs\Yii_mindphp\framework\yiic.bat  ดังนี้
แก้ไขบรรทัด
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
เป็น
if "%PHP_COMMAND%" == "" set PHP_COMMAND=ตำแหน่งไฟล์ php.exe ในเครื่องจะได้

if "%PHP_COMMAND%" == "" set PHP_COMMAND=D:\xampp\php\php.exe
เสร็จเร็ว Save ไฟล์ และรัน Command เพื่อสร้าง web application อีกครั้ง ถ้าไม่มีอะไรผิดพลาดก็จะได้ ตามรูป
สร้างงานของเราด้วย Yii Framework
6. จะได้ไฟล์และโพสเดอร์ตามรูป เป็น web appication ของเราแล้วครับ เวลาใช้งานจริงก็อัพ framework กับ folder ที่สร้างขึ้นมานี้ได้เลย
โครงสร้างไฟล์ในระบบงานของเรา ที่ Yii Framwork สร้างให้
7. ลองเรียก url เข้าไปที่ http://localhost/yii_mindphp/myapp_mindphp/ ก็จะเห็นหน้า web appication ของเราแล้วครับตามรูป
หน้าเว็บที่สร้างด้วย Yii Framework
 ต้องการปรับแต่งอะไรต่อไปก็ใช้ความรู้ที่มีจัดการได้เลยครับ สำหรับผมจบเท่านี้ก่อนนะครับ
มีปัญหาหรือต้องการพูดคุยเรื่อง Yii Framework เชิญที่เว็บบอร์ดนะครับ

ต่อไปมาใช้ ทำ  SEF ด้วย Yii Framework

User Rating: 2 / 5

Star ActiveStar ActiveStar InactiveStar InactiveStar Inactive

Yii Framework Code Generator (Gii) ตัวช่วยสร้างโค้ด ตามรูปแบบ MVC เครื่องมือนี้ สามารถให้งาน ในลักษณะ web application ได้เลย
Yii Framework Code Generator ตัวช่วยสร้างโค้ด ตามรูปแบบ MVC
ก่อนใช้งานเข้าไปแก้ไข
D:\xampp\htdocs\Yii_mindphp\myapp_mindphp\protected\config\main.php
เพื่อเปิดใช้งาน Gii โดยแก้ไข
ยกเลิก Cemmnet Code และกำหนดรหัสผ่านสำหรับเข้าหน้า Gii        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'123456',
             // If removed, Gii defaults to localhost only. Edit carefully to taste.
            'ipFilters'=>array('127.0.0.1','::1'),
        ),
ใช้ Browser เข้าไปที่ http://localhost/yii_mindphp/myapp_mindphp/index.php?r=gii

กรอก รหัสผ่านที่ตั้งไว้

ก่อนอื่น ต้องสร้างตารางให้เรียบร้อยด้วย phpMyadmin หรือ GUI อื่นๆในการสร้างตาราง แล้วอยาก gen code สำหรับ และทำตามขั้นตอนต่อไปนี้

1. คลิกไปที่เมนู Model Generator  กรอกชื่อตาราง ที่เราต้องการสร้ง Model ลงไป เช่นผมใช้ตาราง thaidomain
ตามรูป
Gen Model ด้วย Gii ของ Yii Framework
เสร็จแล้วคลิก Preview และคลิกปุ่ม Generate จะได้ไฟล์ models\Thaidomain.php ซึ่งเป็นไฟล์ M ของ M-V-C

2. Crud Generator สำหรับการทำหน้า CRUD ข้อมูลในตารางในฐานข้อมูล CRUD ย่อมาจาก ADD (Create) - View (Read) - Update - Delete
หน้าสำหรับ Gencod ของ Yii Framework
เสร็จแล้วคลิก Preview และคลิกปุ่ม Generate
จะได้ไฟล์ ส่วนของ V-C (View และ Controllers) ของ M-V-C เมื่อรวมข้อ1,2 ก็จะได้ครบตารูปแบบ MVC
3. ก่อนนำไปใช้งานต้องตั้งค่าติดต่อกับฐานข้อมูล ก่อน แก้ไขไฟล์
เอา Comment code ออกแล้วแก้ไขค่า ติดต่อฐานข้อมูลให้ตรงกับ เครื่องของเรา
        'db'=>array(
            'connectionString' => 'mysql:host=localhost;port=3309;dbname=ltd_flexthai_com',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ),
เท่านี้เราก็จะได้ Web application สำหรับจัดการข้อมูในตารางที่ต้องการแล้วครับ ส่วนถ้าต้องการแก้ไขเพิ่มเติมอะไร ตอนนี้ทุกอย่างอยู่ในรูปแบบ MVC แล้วครับจัดการได้ไม่ยาก

ปล. ถ้าต้องการเพิ่้ม เมนู ไปที่ไฟล์ D:\xampp\htdocs\yii_mindphp\myapp_mindphp\protected\views\layouts\main.php
ต้องการเปลี่ยน URL ให้สวยๆ จัดการที่ urlManager ในไฟล์  D:\xampp\htdocs\Yii_mindphp\myapp_mindphp\protected\config\main.php
ที่มา: http://www.yiiframework.com/tour/

Model Generator

User Rating: 3 / 5

Star ActiveStar ActiveStar ActiveStar InactiveStar Inactive
SEF (Search Engine Friendly) เป็นการทำให้ Query String ของเราอ่านได้ง่ายๆ ขึ้น ซึ่ง bot ของ Search Engine ชอบ และเราเองก็สามารถอ่าน Query String ได้เข้าใจง่ายขึ้น Webserver ของเราต้องเป็น Apache นะครับ เวอร์ชั่นไหนก็ได้
ตัวอย่าง Query String ปกติ
index.php?r=site/indexSEF URL
index.php/site/index
จากบทความที่แล้ว เริ่มใช้ Yii Framework สอนการใช้งาน Framework สำหรับ Web 2.0 เรามาทำ url สวยๆ กันต่อ
วิธี
1.แก้ไขไฟล์ config โดยเปิดไฟล์
D:\xampp\htdocs\Yii_mindphp\myapp_mindphp\protected\config\main.phpแก้ไข
        // uncomment the following to enable URLs in path-format
        /*
        'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),
        */
เป็น
        // uncomment the following to enable URLs in path-format
        'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),

2.สร้างไฟล์ .htaccess ไว้ที่
D:\xampp\htdocs\Yii_mindphp\myapp_mindphp\.htaccessข้อความภายในไฟล์ ตามนี้
Options +FollowSymLinks
IndexIgnore */*
<IfModule mod_rewrite.c>
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php
</IfModule>


User Rating: 1 / 5

Star ActiveStar InactiveStar InactiveStar InactiveStar Inactive
หา Query String ใน Yii Framework
โดยปกติแล้ว ถ้าเราเขียน php โดยไม่ได้ใช้ Framework ค่าที่ต้องการนี้จะอยู่ใน ตัวแปลก superglobal $_SERVER
ถ้าเป็น Yii Framework

$QueryString    =    Yii::app()->getRequest()->getQueryString();และค่าต่างๆของ $_SERVER ถ้าใช้ Yii ก็เข้ามาใช้ได้โดย Yii::app()->getRequest()->getXXX();
เช่น ต้องการรู้ Browser ของ Client  หรือ url ปัจจุบัน
สามารถหาได้ด้วย getBaseUrl() เป็นต้น

ดูข้อมูลเพิ่มเติมของ CHttpRequest ที่มาของ getRequest ได้ที่นี่


User Rating: 2 / 5

Star ActiveStar ActiveStar InactiveStar InactiveStar Inactive
Performance of Yii php Framework ที่ทำงานเร็วที่สุด จากกราฟเป็นการแสดงการตอบสนองของ web Server ที่รองรับการ request ได้ภายใน 1 นาที เทียบกับ php Framework ที่มีชื่อเสียงต่างๆ ดูตามรูปเลยครับ
สำหรับ space เครื่องที่ใช้ ทดสอบ
  • Operating System: Red Hat Enterprise Linux Server release 5.2
  • Web Server: Apache httpd 2.0.40
  • PHP: 5.2.6, any non-essential extensions are disabled
  • CPU: Dual Intel Xeon 3.2GHz
  • Main Memory: 2GB
  • Hard Drive: 73GB 15K RPM SCSI/SAS HDD
กราฟแท่งสีแดงคือเปิดใช้ งาน APC ด้วย
Performance of Yii
ทำไม Yii Framework ถึงเร็วได้ใจเช่นนี้มาดูกัน ตามเอกสารบอกว่า  Yii ใช้การเทคนิคการโหลด แบบ lazy ซึ่งมันจะไม่เอาคลาสที่ไม่ได้ใช้งานเข้ามา และจะไม่สร้าง object จนกว่าจะมีการเรียกใช้ในครั้งแรก ทำให้มันทำงานเร็วกว่า Framework ตัวอื่นๆ ที่โหลดสิ่งที่ไม่จำเป็นเข้ามารอไว้ก่อนเพื่อประมวลผล

ข้อมูลจาก: http://www.yiiframework.com/performance/

User Rating: 1 / 5

Star ActiveStar InactiveStar InactiveStar InactiveStar Inactive
จากบทความ เริ่มใช้ Yii Framework สอนการใช้งาน Yii Framework ตอนนี้มาดูอีกส่วนหนึ่ง ของ Yii Framework ที่ทำให้เราจัดการกับฐานข้อมูลได้ ไม่ว่าจะเป็น insert update delete search ข้อมูล ได้สะดวกและรวดเร็วขึ้น
สำหรับ Library อื่นๆ ที่มี AR ให้ใช้ เช่น ADODB เขียน php เพื่อใช้งาน กับ database ทุกตัว เมื่อเทียบกับ การเขียน php ติดต่อฐานข้อมูลด้วย function ของ php เอง เปรียบเทียบ PHP function ของ Mysql กับ ADOdb การแบ่งหน้า ท่านจะเห็นว่าการเขียนโดยใช้ lib จะช่วยประหยัดเวลาในการเขียน โค้ดได้เยอะพอสมควร
ตอนนี้ มาเข้าเรื่อง  Active Record กันดีกว่าครับ Active Record เป็นส่วนหนึ่งของ Yii Framework Active Record เป็น ORM (Object-Relational Mapping)
มาดูตัวอย่างการใช้ AR ในการเพิ่มข้อมูล ลงในตารางกันกัน
เช่น ผมมี ตาราง tbl_post
CREATE TABLE tbl_post (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
title VARCHAR(128) NOT NULL,
content TEXT NOT NULL,
create_time INTEGER NOT NULL
);
โค้ดในการเพิ่มข้อมูลของตารางนี้โดยใช้ AR
$post=new Post;
$post->title='sample post';
$post->content='post body content';
$post->save();
อธิบาย โครงสร้างตารางนี้ จะมี field เป็น id เป็น AUTOINCREMENT
ตามโค้ด เราสร้าง object ชื่อ $post ขึ้นมา แล้วกำหนด attribute ให้กับ object และ เรียกใช้งาน method save
AR ก็จะเก็บข้อมูลของเราลงตารางให้เราเอง

ฐานข้อมูลที่สามารถใช้ AR ได้
ศึกษาข้อมูลเพิ่มเติมได้ที่
http://www.yiiframework.com/doc/guide/1.1/en/database.ar

User Rating: 2 / 5

Star ActiveStar ActiveStar InactiveStar InactiveStar Inactive

แสดงคำสั่ง SQL ของ Activerecord Yii Framework
ประโยชน์ของมันคือ เราจะได้รู้คำสั่ง sql ที่ ถูกสร้างจาก Activerecord ตรงตามต้องการหรือเปล่า นอกจากนี้ เจ้า Profiling ยังรายงานให้เราทราบว่ารันคำสั่ง sql แต่ละคำสั่ง กี่ครั้งและแต่ละครั้งใช้เวลาเท่าไร
วิธี enableProfiling
เปิดไฟล์
protected/config/main.phpเพิ่ม
'enableProfiling'=> true,
ในส่วนของ
'db'=>array(....),

จะได้
        'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=dbname',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'enableProfiling'=> true,
        ),

และเปลี่ยน
        'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                array(
                    'class'=>'CFileLogRoute',
                    'levels'=>'error, warning',
                ),

เป็น
        'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                array(
                    'class'=>'CProfileLogRoute',
                    'levels'=>'error, warning',
                ),
เท่านี้เราก็จะเห็นคำสั่ง sql โชว์ขึ้่นมาด้านล่างทุกๆ หน้าของโปรแกรมของเราแล้ว