Upload
leliem
View
238
Download
0
Embed Size (px)
Citation preview
Yii 2 Database and Report พฒนา Web Application ดวย Yii 2: ฐานขอมล และรายงาน
โคชเอก
หนงสอเลมน �จาหนายท� http://www.codingthailand.com/yii2ebook
เวอรชน 1 ออกจาหนายวนท� 1 มกราคม 2559
หนงสอเลมน �ผ เขยนต �งใจจดทาข �นเพ�ออยากใหมหนงสอภาษาไทยซกเลมเก�ยวกบ Yii Framework 2 ท�เนนเน �อหาเจาะลกดานฐานขอมล
และการทารายงานในรปแบบตางๆ ซ�งคดวาผอานท�ตองการพฒนา Web Application จาเปนตองมความร ความเขาใจ และสามารถ
นาไปใชกบการทางาน และใชเพ�อพฒนาองคกรของตนเอง หวงวาหนงสอเลมน �จะเปนประโยชน ประหยดเวลาการเรยนร ขอบคณทกคนนะ
ครบ ขอใหมความสข และสนกกบการเรยนรครบ
“ความสาเรจไมมทางลด ตอใหเกงแคไหน แตขาดวนยกบความตอเน�อง
คงยากท�จะผานอปสรรคไปได”
©2015 - 2016 โคชเอก
สารบญ
บทท� 1: เร�มตน และตดต �ง Yii 2
- ทาไมตองใช PHP Framework
- ทาความรจกกบ Yii Framework
- MVC และ Best Practices
- การตดต �งตองเตรยมอะไรบาง
- Extension ของ PHP ท�ควรเปดไว
- แนะนา Advance Project Template
- แนะนา Advanced Project Template ของ Nenad Zivkovic
- ข �นตอนการตดต �ง Advanced Project Template ผาน Composer
- แนะนาการใชงาน Advanced Project Template เบ �องตน
- โครงสรางของ Advanced Project Template
- สรางโปรเจคใหมดวย Netbeans
- การต �งคา Advanced Project Template ของ Nenad Zivkovic
- การต �งคา Time Zone เพ�อจดรปแบบวนท� และเวลาในประเทศไทย
- การต �งคา และเปล�ยนหนาตาเวบไซต (Theming)
- การตดต �ง Admin Template (AdminLTE)
- การต �งคา AdminLTE
- การสรางโฟลเดอร Theme สาหรบ AdminLTE
- การเพ�มเมนดานซายใหกบ AdminLTE
- เทคนคการใส Box components ของ AdminLTE ใหกบ GridView และ Form
บทท� 2: Yii2 กบการใชงานดานฐานขอมล
- การใชงาน Database Migration
- การสรางตารางใหมโดยใช Database Migration
- การ Reverting หรอ Undo โดยใช Database Migration
- การใชงาน Data Access Object
- Data Access Object: สรางการตดตอกบฐานขอมล
- Data Access Object: การส�งรนคาส�ง SQL
- Data Access Object: เมธอดสาหรบ query ขอมล
- Data Access Object: ลองเขยน DAO เพ�อเรยกด และแสดงขอมลจากตาราง position
- Data Access Object: ลองเขยน DAO เพ�อลบจากตาราง position
- Data Access Object: DAO สาหรบการเพ�ม และแกไขขอมล
- Data Access Object: การใชเทคนค prepare เพ�อทาใหการเรยกดขอมลไดมประสทธภาพมากข �น
- Data Access Object: การปองกนไมใหช�อคอลมนในตาราง และช�อตารางซ �ากบคาสงวนของฐานขอมล
- ทาความรจกกบ Query Builder
- ข �นตอนการใช Query Builder
- ฝกเขยน Query Builder และ ดรายละเอยด Method สาหรบการควร�ขอมล
- การใชงาน Active Record
- การสราง Models ดวย Gii เพ�อใชงานกบ Active Record
- ข �นตอนการควร�ขอมลดวย Active Record
- การควร�ขอมลดวย Active Record แบบวธลด (shortcut methods)
- การเขาถง Attributes ขอมล เม�อใช Active Record
- การสราง Attributes ใหม อาจใชคานวณ หรอจดรปแบบขอมล เม�อใช Active Record
- เทคนคการใช asArray() กบ Active Record
- การเพ�ม หรอแกไขขอมลดวย Active Record
- การเพ�มหรอลดคาของคอลมน (Updating Counters)
- การลบขอมล โดยใช Active Record
- การใช Transactions
- การ Join ตาราง โดยใช Active Record
- การใช Data Providers สาหรบแบงหนา และจดเรยงขอมล
- การใช SqlDataProvider สาหรบแบงหนา และจดเรยงขอมล
- การใชงาน GridView
- การกรองขอมลใน GridView (filters)
- Workshop: การจดการขอมลบคลากร (Person)
บทท� 3: การสรางรายงานดวย Yii 2
- สรางรายงานในรปแบบ PDF และรองรบฟอนตภาษาไทย ดวย mPDF
- ข �นตอนการตดต �ง yii2-mpdf
- การสงอออกและนาเขาไฟล Excel
- สรางรายงานในรปแบบ Chart ดวย HighCharts
บทท� 4: โบนสพเศษ
- การต �งคาและทางานกบอเมล ดวย SMTP
- ทดลองสงเมล ดวย SMTP
- การสราง email layout และ view สาหรบสงเมล
- แนะนาการอพโหลด Yii2 เพ�อใชงานจรง
บทท� 1: เร�มตน และตดต �ง Yii 2
ทาไมตองใช PHP Framework
มการเขยนโคดท�เปนมาตรฐาน ชวยลดและกาจดโคดท�ไมจาเปน
ชวยลดระยะเวลาในการทางาน เชน เร�องความปลอดภย การสรางฟอรม เปนตน
ชวยทาใหการทางานเปนทมงายข �น เพราะตองเขยนโคดเปนมาตรฐานเดยวกน
ชวยในการบารงรกษาโคดไดงายข �น
ม community ท�เขมแขง เราสามารถถาม และคอยขอคาแนะนาได
ทาความรจกกบ Yii Framework
Yii (อานออกเสยงวา ย) เปน PHP Framework ท�มประสทธภาพการทางานสง มคณลกษณะเดนหลายดานท�ชวยใหเราเขยนโปรแกรมได
งายข �น ไมวาจะเปน MVC, DAO, Form input และการตรวจสอบความถกตองของขอมล (validation), AJAX, Security เปนตน นอกจากน �
Yii ยงสามารถสราง Web Application ไดทกขนาด ไมวาจะเปนระบบ CMS, e-commerce, Restful Web service และยงใหนกพฒนาตอ
ยอดเขยน extensions เสรมไดอกดวย
MVC และ Best Practices
Yii มรปแบบการเขยนแบบ MVC (Model, View, Controller) ซ�งการจะเขยนใหดน �น ตองศกษาแนวทางกนกอน สรปใหดงน �
สรปการเขยน Model ท�ด
ประกอบดวย โคดในสวน business data
ประกอบดวย โคดในการสวนของการตรวจสอบความถกตองของขอมล
ประกอบ ดวย method การทางานในสวนของ business logic
อยาเขยนโคดเก�ยวกบการ request, session หรอโคดเก�ยวกบสภาพแวดลอมของระบบ
ระวงหรอหลกเล�ยงเขยนโคดเก�ยวกบ HTML ในสวนของการแสดงผลใน Model ใหไปเขยนท� view แทน
สรปการเขยน View ท�ด
View จะตองมโคดเฉพาะ HTML และ PHP ท�เก�ยวของกบการแสดงผล จดรปแบบขอมลตางๆเทาน �น
จะตองไมโคดเก�ยวกบการ query ฐานขอมลตางๆ
หลกเล�ยงการรบคา $_GET, $_POST เพราะเปนหนาท�ของ Controller
ถาเรารบคามาจาก model จะตองไมไปแกไขคาท�รบมา
ใชคลาสในกลม Helper เพ�อชวยในการจดรปแบบขอมล
สรปการเขยน Controller ท�ด
มไวเขยนเก�ยวกบ request ขอมล เชน get, post, put เปนตน
มไวเรยกเมธอดเก�ยวกบ Models และ เรยก component ตางๆ
มไวสงขอมลตางๆ ไปให views เพ�อนาไปแสดงผล
ไมควรมโคดการประมวลผลของ Models ถามใหไปเขยนท� Models ดกวา
หลกเล�ยงการเขยน HTML และโคดท�เก�ยวของกบการแสดงผลขอมล ใหไปเขยนท� view ดกวา
การตดต �งตองเตรยมอะไรบาง
เน�องจากหนงสอเลมน �ไมใชหนงสอพ �นฐาน การเตรยมตวอยางแรกในการอานหนงสอเลมน �คอ เราจะตองมพ �นฐานภาษา PHP และ ม
ความรเก�ยวกบการเขยนโปรแกรมในรปแบบของ Object Oriented Programming หรอ OOP มากอน เพ�อใหเกดประโยชนสงสดในการ
เรยนร สาหรบคนท�ยงไมมพ �นฐานความรดงท�กลาวมา ผมวาแนะนาควรใหศกษากอนดกวาครบ
ในการตดต �ง Yii 2 ส�งท�เราตองเตรยม ประกอบดวย
1. XAMPP สาหรบจาลองเคร�องเราใหเปน Web Server ประกอบดวย Apache, PHP, MySQL/MariaDB และ phpMyAdmin
2. Netbeans สาหรบใชเขยนโคด หรอจะใช IDE ท�ถนดกได
3. Composer สาหรบการจดการกบ PHP Packages หรอ Library ตางๆ
ข �นตอนการตดต �งท �งหมด สามารถเปดดวดโอไดท� https://www.youtube.com/watch?v=6DH_aEaJ3X4
Extension ของ PHP ท�ควรเปดไว
บางคร �งระหวางตดต �ง Composer หรอ พฒนา Web Application อาจม errors สาหรบบางคาส�ง กอนตดต �ง Yii2 ควรไปตรวจสอบ หรอ
เปด extension ในไฟล php.ini ใหเรยบรอย คอ ใหเปดไฟล php.ini (C:\xampp\php\php.ini) คนหา extension แลวเอาเคร�อง; ออก
ขางหนา เสรจแลวบนทกไฟลแลว restart Apache สวนรายการ extension ท�ควรเปดมดงตอไปน �
extension=php_bz2.dll extension=php_curl.dll extension=php_mbstring.dll extension=php_fileinfo.dll
extension=php_gd2.dll extension=php_openssl.dll extension=php_intl.dll
แนะนา Advance Project Template
หลงจากตดต �งเคร�องมอตางๆ เรยบรอยแลว เราจะมาตดต �ง Yii 2 กน ซ�งโดยปกตรปแบบของโปรเจคของ Yii 2 จะมอย 2 รปแบบดวยกน
ไดแก Basic Project Template และ Advanced Project Template ในหนงสอเลมน �ผมจะเลอกใชรปแบบ Advanced Project Template
เพราะมการแยกสวน Front-end และ Back-end กนอยางชดเจน และมตวชวยอ�นๆเชน มหนาเวบลงทะเบยนผใช มหนาและฟงกชนการก
คนรหสผานผใช โดยท�เราไมตองออกแรงเพ�ม แต!! ยงมดกวาน �นคอ ในหนงสอเลมน �เราจะใช Advanced Template ท�จะชวยทนแรงเรา
ข �นไปอก โดยมคนท�ทา Advanced Project Template สาเรจรปท�มหลากหลายฟงกชน และเราสามารถตดต �งมาใชไดเลย
แนะนา Advanced Project Template ของ Nenad Zivkovic
เพ�อความรวดเรว และประหยดเวลาในการพฒนา Web Application หนงสอเลมน �จะใช Advanced Project Template ของ Nenad
Zivkovic ใหเราเขาไปดรายละเอยดตางๆไดท� https://github.com/nenad-zivkovic/yii2-advanced-template หรอใครจะใช Advance
Project Template แบบมาตรฐานท�มากบ Yii กไดเชนเดยวกน
สาหรบ Advanced Project Template ของ Nenad Zivkovic น �นเคาไดเขยนเพ�มฟงกชนตางๆจาก Advanced Project Template แบบ
มาตรฐานของ Yii หลายสวนดวยกน ไดแก
มระบบลงทะเบยนผใช (User) ให พรอมกาหนด account activation ไดดวย (กาหนดไดวาผใชตองยนยนตวตนผานอเมลหลง
ลงทะเบยนหรอไม) โดยกาหนดไดท� common/config/params.php
สามารถลอกอนไดท �งใชแบบ username/password แบบปกต และยงลอกอนไดแบบ email/password ไดดวย แนนอนเรา
สามารถต �งคาระบบไดท� โดยกาหนดไดท� common/config/params.php เชนเดยวกน
มระบบการจดการผใช หรอ RBAC มาใหเรยบรอย ทาใหเราสามารถจดการในสวนของผใชไดเลย และสามารถกาหนดบทบาท
หรอสทธ�ในการเขาถงหนาเวบไดงายข �น
มการเกบ Session ลงในฐานขอมล
มระบบธม (Theming) สาหรบเปล�ยนหนาเวบไซตไดหลากหลายรปแบบ และยงสามารถเพ�มธมไดงาย
มระบบเวบไซตแบบหลายภาษา (Translation) ทาใหเราสามารถกาหนดใหเวบไซตมการแสดงผลแบบหลายภาษาได
มระบบ และหนาเวบให admin หรอ The Creator (ตวเรา) จดการกบผใชไดเลย
มระบบตรวจสอบรหสผานสาหรบแนะนาผใชวากรอกยาก-งายเกนไปหรอไม
และแนนอนเรายงใชความสามารถของ Advanced Project Template แบบมาตรฐานของ Yii ไดครบถวน เตรยมอนเตอรเนตให
พรอม แลวมาตดต �งกนเลยครบ!
ข �นตอนการตดต �ง Advanced Project Template ผาน Composer
1. เขาไปท�โฟลเดอร htdocs ของ XAMPP (ปกตจะอยท� C:\xampp\htdocs) แลวคลกขวา เลอก Use Composer here เราจะไดหนาตาง
command line ข �นมาเพ�อพรอมพมพคาส�งสาหรบตดต �ง หรอถาไมคลกขวากสามารถใชคาส�ง command line ไดโดย cd เขาไปยง
โฟลเดอร htdocs กไดเหมอนกน เชน cd c:\xampp\htdocs
Note: สาหรบคนท�ใช Linux หรอ Mac OS X ใหตดต �ง Composer โดยพมพคาส�ง:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
2.พมพคาส�ง composer self-update เพ�อ update เวอรชนของ Composer ใหลาสด แลวกดป ม Enter รอสกครจะข �นคาวา Updating to
version… กเปนอนเสรจเรยบรอย
3. ตดต �ง composer asset plugin พมพคาส�ง composer global require "fxp/composer-asset-plugin:~1.1.1" แลวกดป ม Enter รอ
จนกวาจะเรยบรอยเหมอนเดม
Note: ระหวางข �นตอนท� 3 สาหรบคนท�เพ�งเคยตดต �งคร �งแรก จะมการถามหา token ของ GitHub ดงน �น ใหไปสราง token กอน
โดยไปสมครสมาชกไดท�เวบ github.com จากน �นลอกอนแลวเขาไปท� https://github.com/settings/tokens คลกป ม Generate
new token กรอก Token description คลกป ม Generate token แลวใชเมาสลากคลม token เพ�อคดลอก (Copy) แลวนาไปวาง
(Paste) ท�หนาจอ command line ไดเลย
4. สรางโปรเจคใหมโดยเราจะใช Advanced Project Template ของ Nenad Zivkovic
พมพคาส�ง composer create-project nenad/yii2-advanced-template yii2system แลวกดป ม Enter รอจนเสรจเรยบรอย แลวใหลอง
ตรวจสอบดวามโฟลเดอร yii2system ถกสรางข �นในโฟลเดอร htdocs หรอไม ถาม แสดงวาตดต �งเรยบรอยแลว
Note: ตรงคาส�ง yii2system คอ ช�อโฟลเดอรท�จะถกสรางท� C:\xampp\htdocs สาหรบเกบไฟลโปรเจคของเราน�นเอง
5. พมพคาส�งเพ�อเขาไปในโฟลเดอร _protected ดงน � cd yii2system/_protected/ แลวกดป ม Enter (อยาลมวา yii2system คอช�อโปรเจค
ของเรา ถาเปล�ยนช�อเปนอยางอ�นกอยาลมเปล�ยนตรงน �ดวย) ตอดวยพมพคาส�ง php init กด Enter พมพ 0 แลว Enter อกคร �งเพ�อเลอก
สภาพแวดลอมการพฒนาโปรแกรม (Development) พมพ yes แลวกด Enter
6. สรางฐานขอมล (database) โดยใช phpMyAdmin เปด Browser แลวพมพ http://localhost/phpmyadmin คลกท� ลงก New เพ�อสราง
ฐานขอมลใหม จากน �นกรอกช�อฐานขอมล รวมท �ง Collation เสรจแลวคลกป ม Create
7. เปดไฟล main-local.php เพ�อต �งคาฐานขอมลใหถกตอง yii2system /_protected/common/config/main-local.php แลวแกไขไฟลให
ตรงกบฐานขอมลท�ไดสรางไว ไดแก dbname, username, password
8. กลบมาท�หนาตาง command line (สงเกตวาเรายงอยในโฟลเดอร _protected อย) พมพ yii migrate แลวกด Enter จากน �นจะมรายการ
ตารางของฐานขอมลแสดงข �นมา พมพ yes เพ�อสรางตารางทกตาราง โดยตารางตางๆน �น ประกอบดวยตารางผใช ตารางสาหรบ rbac
ตารางสาหรบเกบ session และ ตารางตวอยางสาหรบเกบบทความ (article)
Note: ถาใช Linux หรอ Mac OS ใหใชคาส�ง . /yii migrate
9. พมพคาส�ง yii rbac/init แลวกด Enter เพ�อสรางระบบจดการผใชแบบ rbac สรางตารางบทบาท และสทธ�การเขาใชงานตางๆ
Note: ถาใช Linux หรอ Mac OS ใหใชคาส�ง . /yii migrate/init
10. เสรจเรยบรอย! เปด Web browser แลวลองพมพ http://localhost/yii2system เพ�อเขาในสวนของ front-end และลองพมพ
http://localhost/yii2system/backend เพ�อเขาสวนของ back-end
แนะนาการใชงาน Advanced Project Template เบ �องตน
หลงจากตดต �ง Advanced Project Template เรยบรอยแลว ส�งท�ตองทาตอไป คอ แนะนาใหลงทะเบยน (เมน Signup) เพ�อสรางผใช
ใหม สาหรบผใชคนแรกท�ลงทะเบยนจะไดเปน ผดแลระบบสงสด หรอเรยกบทบาทวา The Creator สามารถทาอะไรกไดใน Web
Application ของเรา สวนการลงทะเบยนคร �งตอๆมาจะไดบทบาทหรอสทธ�เปนสมาชกหรอ member น�นเอง