Skip to content
CodingThailand's Blog
CodingThailand's Blog

by โค้ชเอก

  • Home
  • About Me
  • CodingThailand.com
CodingThailand's Blog

by โค้ชเอก

แนวทางที่ดีในการเขียน PHP Framework แบบ MVC

14/05/201614/05/2016

แนวทางและข้อปฏิบัติในการเขียน PHP Framework แบบ MVC (กรณีศึกษา Yii Framework 2)


[Models]
Models เป็นศูนย์รวมเกี่ยวกับข้อมูลของระบบ มีกฎตรวจสอบความถูกต้อง และตรรกะเกี่ยวกับระบบของเรา ใช้สำหรับควบคุมและการทำงานของข้อมูลต่างๆ แน่นอนส่วนใหญ่แล้ว Models โค้ดมักเยอะกว่า Controllers มีแนวทางการเขียน ดังนี้

1. ควรประกอบไปด้วย attributes หรือคุณลักษณะของข้อมูล
2. มีส่วนในการตรวจสอบความถูกต้องของข้อมูล
3. ประกอบไปด้วย method ที่เกี่ยวกับ business logic
4. ไม่มีการเขียนเกี่ยวกับ request, session
5. ไม่มีการเขียนส่วนแสดงผล html แน่นอนให้ไปเขียนที่ views แทน
6. หลีกเลี่ยงการมีหลาย scenarios ใน 1 Models

 

[Views]
Views มีหน้าที่เกี่ยวกับการแสดงผลส่วนหน้าเว็บ ประกอบด้วยการจัดรูปแบบข้อมูล การแสดงผลตาม users ต้องการ มีแนวทางการเขียน ดังนี้
1. ประกอบไปด้วยโค้ดในส่วนของการแสดงผล เช่น HTML และโค้ด PHP สั้นๆ เกี่ยวกับกับการจัดรูปแบบข้อมูล หรือ render ข้อมูล
2. ไม่มีโค้ดเกี่ยวกับการจัดการ การ query ข้อมูลจากฐานข้อมูล ส่วนนี้ให้ไปเขียนที่ Models แทน
3. หลีกเลี่ยงการรับข้อมูลแบบ request เช่น $_GET,$_POST ส่วนนี้แนะนำให้ไปเขียนที่ Controller แทน
4. ให้อ่านและเรียกคุณลักษณะ (properties) ของโมเดล แต่ให้หลีกเลี่ยงการการแก้ไข
5. ถ้าส่วนแสดงผลมีการทำงานซ้ำๆ กัน ก็ควรแยกไปใช้ layout หรือสร้างและใช้งาน widgets ในการสร้าง views เป็น blocks แทน
6. สร้างและใช้งาน helper class ต่างๆ ในการจัดรูปแบบข้อมูล เช่น Html helper, Url Helper เป็นต้น

 

[Controllers]
Controllers มีหน้าที่เกี่ยวกับการประมวลผล requests และ responses เมื่อเขียน Controllers แล้วรู้สึกว่าโค้ดมันเริ่มเยอะ ควรแยกโค้ดบางส่วนแยกเป็นคลาสอื่นดีกว่า มีแนวทางการเขียน ดังนี้
1. มีไว้เขียนเกี่ยวกับ request ข้อมูล เช่น get, post, put
2. มีไว้เรียกเมธอดเกี่ยวกับ Models และ เรียก component ต่างๆ
3. มีไว้ส่งข้อมูลต่างๆ ไปให้ views เพื่อนำไปแสดงผล
4. ไม่ควรมีโค้ดการประมวลผลของ Models ถ้ามีให้ไปเขียนที่ Models ดีกว่า
5. หลีกเลี่ยงการเขียน HTML และโค้ดที่เกี่ยวข้องกับการแสดงผลข้อมูล ให้ไปเขียนที่ views ดีกว่า

 

[Security best practices]
(แนวทางการเขียนเพื่อความปลอดภัยของระบบ) มีแนวทางดังนี้

1. Filter input แน่นอนเราไม่สามารถไว้ใจ input ที่เข้ามาในระบบได้ เราควรเขียนโค้ดเพื่อกรองข้อมูลเหล่านี้โดยใน yii เราสามารถใช้ form validation ได้
2. ระวังเรื่อง SQL injections แน่นอนควรใช้การ prepared statements โดยใน yii มีส่วนจัดการฐานข้อมูลให้อยู่แล้ว ได้แก่ Active Record (มี prepared statements มาพร้อมแล้ว)
และมีในส่วนของ Database Access Objects และ Query Builder (อันนี้ต้องเขียนในส่วน prepared statements ระวังด้วยครับ)
3. ระวัง XSS หรือ cross-site scripting แนวทางการป้องกันมี 2 วิธีง่ายๆ ได้แก่
3.1 ใช้คลาส Html helper และเรียก method encode สำหรับการทุกๆการแสดงผล เช่น

<?= \yii\helpers\Html::encode($username) ?>

3.2 ถ้าส่วนเนื้อหามีโค้ด html ติดมาด้วยให้ใช้คลาส HtmlPurifier และเรียกใช้ method process เข้าช่วยครับ เช่น

<?= \yii\helpers\HtmlPurifier::process($description) ?>

3.3 ให้เปิดในส่วนของ CSRF เพื่อป้องกันการปลอม request
3.4 อย่าลืมปิดเครื่องมือเกี่ยวกับการ debug เมื่อจะเอาขึ้นใช้งานจริง (กำหนด YII_DEBUG ให้เป็น false)

 

เป็นไงกันบ้างครับ ลองเอาไปใช้ดูได้นะครับ 🙂

Views: 4505

Yii Yii2

Post navigation

Previous post
Next post

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Posts ล่าสุด

  • การใช้งาน Prefetching ใน Next.js
  • 14 ข้อคิด เพื่อการเป็น Developer ที่ดีขึ้น จาก “Lee Robinson”
  • เคยเจอ “TypeError: Cannot read property ‘x’ of undefined” หรือเปล่า
  • บันทึกการเขียนเว็บไซต์ใหม่ในรอบ 10 ปี ย้ายมาใช้ Next.js
  • ทำไมการจัดการ Error ใน JavaScript ถึงเป็นเรื่องท้าทาย?

Recent Comments

    หมวดหมู่

    • .NET
    • AI
    • Android
    • Angular
    • Angular 2
    • Coding
    • CSS
    • Database
    • Editor
    • Flutter
    • Git
    • HTML5
    • Ionic 2
    • Ionic 4
    • Ionic Framwork
    • JavaScript
    • Laravel
    • Laravel 5
    • Next.js
    • Node.js
    • PHP
    • PHP 7
    • Plugins
    • React
    • React Native
    • Template
    • Tools
    • TypeScript
    • UI
    • Uncategorized
    • Vue.js
    • XAMPP
    • Yii
    • คอร์สเรียน
    • แรงบันดาลใจ

    Archives

    • July 2025
    • April 2025
    • November 2024
    • October 2024
    • April 2020
    • February 2020
    • August 2019
    • September 2018
    • August 2018
    • February 2018
    • November 2017
    • October 2017
    • August 2017
    • July 2017
    • April 2017
    • October 2016
    • August 2016
    • May 2016

    Tags

    .NET android Angular Angular 2 Atom Coding Coding Standard CSS CSS 3 Datepicker Express.js extensions Git HTML HTML5 Ionic2 JavaScript Laravel5 laravel 5.5 MariaDB Material Design MySQL Node.js npm PHP PHP7 plugins PouchDB recaptcha Restful sail.js template typescript typscript XAMPP Yii2

    ผู้เยี่ยมชม

    • 0
    • 1,818,152
    • 547,559
    • 4,505
    ©2025 CodingThailand's Blog | WordPress Theme by SuperbThemes