**เค้กพีเอชพี** (CakePHP) คือ เฟรมเวิร์กที่เขียนขึ้นโดยใช้ภาษาพีเอชพี ซึ่งเป็นตัวช่วยสำหรับพัฒนาเว็บโดยใช้ภาษา PHP และถูกออกแบบบนพื้นฐาน MVC (Model, View, Controller) กล่าวคือ CakePHP ถูกพัฒนาขึ้นโดยใช้ภาษาพีเอชพี ซึ่งช่วยให้สามารถพัฒนาเว็บได้เร็วยิ่งขึ้น โดยเน้นที่การพัฒนาระบบเว็บที่มีขนาดใหญ่ ซึ่งโดยทั่วไปแล้วจะใช้เวลาในการพัฒนามาก แต่หากใช้ CakePHP ก็จะสามารถพัฒนาได้รวดเร็วยิ่งขึ้นเพราะ CakePHP มีตัวช่วย และยังเขียน Code เพียงเล็กน้อยก็สามารถทำงานได้ (Write less do more)

PHP Framework
-------------

PHP Framework เป็นศูนย์รวมของ Class ที่ถูกพัฒนาขึ้นในรูปแบบของ OOP (Object Oriented Programming) โดยมี run-time ที่ช่วยในการพัฒนาเว็บแอปพลิเคชันได้อย่างรวดเร็ว ในการพัฒนาเว็บแอปพลิเคชันโดยทั่วไป นักพัฒนาจะเก็บไฟล์และโครงสร้างโปรแกรมของตัวเองไว้ใช้เพื่อให้การพัฒนาเว็บเป็นไปด้วยความรวดเร็ว แต่ก็มีข้อเสียคือนักพัฒนาคนอื่นต้องมาเรียนรู้ในแต่ละ Class ว่าแต่ละ Class มี Member อะไร และมี Function อะไร ซึ่งทำให้เสียเวลามาก นั่นก็หมายความว่านักพัฒนาแต่ละคนจะรู้เพียง Class ของตัวเองแต่คนอื่นต้องใช้เวลาในการเรียนรู้ ทางแก้คือใช้ CakePHP โดยนักพัฒนาแต่ละคนจะใช้มาตรฐานเดียวกันในการพัฒนา Web Application ซึ่งทำให้การพัฒนาเป็นไปในทิศทางเดียวกันเรียกว่า ธรรมเนียมการเขียนโปรแกรมเดียวกัน

ใน CakePHP จะถูกออกแบบมาให้ช่วยในการจัดการ Active Record, Association Data Mapping, Front Controller และ MVC โดย MVC จะเป็นหัวใจหลักของ CakePHP โดยมี Model View และ Controller

จากการออกแบบของ CakePHP นั้นทำให้นักพัฒนาไม่ต้องเสียเวลาในการแก้ปัญหาทั่ว ๆ ไปของโปรแกรม นักพัฒนาสามารถแยกส่วนของ Business logic ออกมาต่างหากทำให้การพัฒนามีความรวดเร็วมากยิ่งขึ้น

CakePHP สามารถทำงานได้ทั้ง PHP4 และ PHP5 ธรรมเนียมการพัฒนาสามารถปรับใช้ได้กับทั้ง PHP4 และ PHP5 ซึ่งไม่เหมือนกับ PHP framework ส่วนมากที่ผู้พัฒนาต้องเลือกเวอร์ชันของ PHP ให้เข้ากันได้ ซึ่งบางครั้ง web server จะมีเพียง PHP4 หรือ PHP5 ตัวใดตัวหนึ่งเท่านั้น แต่ในที่นี้แนะนำให้ใช้ PHP5 ในการพัฒนาเว็บแอปพลิเคชันด้วย CakePHP

แน่นอน CakePHP เป็น Open Source และเป็นของฟรีใครก็สามารถใช้ได้ ซึ่งสามารถแจกจ่ายภายใต้การอนุญาตของ MIT นั่นก็หมายความว่านอกจากจะเป็นของฟรีแล้วเรายังสามารถที่จะปรับเปลี่ยนซอสโค๊ดได้

หลักการ MVC (Model View and Controller)
---------------------------------------

MVC เป็นสถาปัตยกรรมของการเขียนโปรแกรมแบบใหม่ที่แยกส่วนการทำงานแต่ละส่วนให้เป็นอิสระต่อกัน คือ ส่วนของ Model เป็นส่วนที่ทำงานอยู่กับฐานข้อมูล

M คือ Model, V คือ View และ C คือ Controller

**Model** เป็นส่วนที่ติดต่อกับฐานข้อมูล โดย Model จะรับคำสั่งมาจาก Controller ซึ่งเป็นคำสั่งในการทำงานกับฐานข้อมูล เช่น SELECT, INSERT, UPDATE หรือ DELETE เป็นต้น โดยหลังจาก Model ทำงานตามคำสั่งเรียบร้อยแล้วก็จะ Return ค่ากลับไปที่ Controller อีกครั้งเพื่อให้ Controller ส่งให้ View ต่อไป

**View** เป็นส่วนหลักของ User Interface หรือส่วนติดต่อกับผู้ใช้ ซึ่ง View สามารถที่จะมี Template ของ Layout ที่แตกต่างกันไปได้ โดยข้อมูลต่าง ๆ จะถูกส่งมาจาก Controller แล้วนำมาแสดงผลที่ View เช่นเดียวกันหากเป็นข้อมูลจากฟอร์มก็จะสร้างที่ View แล้วส่งต่อให้กับ Controller ต่อไป

**Controller** เป็น Business Logic หลักของโปรแกรมซึ่งเป็นตัวเชื่อมระหว่าง View กับ Model เช่น การรับค่าจากฟอร์มโดยฟอร์มอยู่ที่ View ส่งค่าให้กับ Controller แล้ว Controller ก็จะทำการสร้าง Logic ในการบันทึกข้อมูล แล้วส่งให้แก่ Model ซึ่ง Model ก็จะรับ Logic ในการบันทึกแล้วบันทึกข้อมูลลงฐานข้อมูลต่อไป

**หลักการทำงานของ MVC**

1. เมื่อ Client มีการร้องขอผ่าน View
2. ข้อมูลจะส่งผ่านไปหา Controller โดย Controller จะเป็นตัวจำแนก Action ต่าง ๆ หรือเป็น Business Logic ของระบบ
3. จากนั้น Controller ก็จะร้องขอไปยัง Model จาก Action นั้น ๆ เช่นร้องขอการเลือกข้อมูลทั้งหมดจากตาราง
4. เมื่อ Model รับการร้องขอก็จะทำการ Query ข้อมูลตามที่ Controller ส่งมา
5. Model จะส่งข้อมูลที่ได้กลับมาหา Controller
6. Controller ก็จะทำการ Set ค่าลงในตัวแปรเพื่อส่งให้ View ต่อไป
7. View ก็จะนำตัวแปรเหล่านั้นไปทำการแสดงผลตามต้องการได้

คุณสมบัติของ CakePHP
--------------------

CakePHP เป็น framework ที่ช่วยให้เราสามารถพัฒนาเว็บแอพลิเคชั่นได้อย่างรวดเร็วโดยคุณสมบัติโดยทั่วไปของ CakePHP นั้น มีดังนี้

* ใช้รูปแบบของ Model-View-Controller (MVC)
* สนับสนุนฐานข้อมูลที่หลากหลาย เช่น MySQL, PostgreSQL และฐานข้อมูลอื่น ๆ
* ง่ายต่อการติดตั้งทั้งใน Unix และ Windows

ความต้องการของ CakePHP
----------------------

HTTP Server เช่น Apache ที่เปิดโหมด session และ mod\_rewrite

PHP 4.3.2 หรือสูงกว่า แน่นอนว่า CakePHP สามารถทำงานได้ทั้ง PHP4 และ PHP5

ระบบฐานข้อมูล ที่ทำงานได้เช่น MySQL, PostgreSQL และ ADODB

ธรรมเนียมการเขียน Controller
----------------------------

ก่อนอื่นมาเรียนรู้การเขียน Controller ก่อน เพื่อให้เข้าใจง่าย เนื่องจาก Controller เป็น Business Logic หลักของโปรแกรมที่เราต้องการสร้างขึ้น พูดง่าย ๆ ว่าเป็น Logic ของโปรแกรมหรือลำดับการทำงานของโปรแกรมที่เราจะเขียนขึ้น โดย Controller เป็นตัวกลางระหว่าง Model กับ View

Controller แปลง่าย ๆ ก็คือ ตัวควบคุมนั่นเอง ใน CakePHP Controller เป็นตัวควบคุมการไหลของข้อมูลระหว่างผู้ใช้ในส่วนของ View กับส่วนที่ติดต่อฐานข้อมูลในส่วนของ Model

ในหัวข้อที่ผ่านมาเราได้ทำการเชื่อมต่อกับฐานข้อมูลแล้วคราวนี้เรามาเริ่มเขียน Controller กันก่อน โดยใช้ Text Editor ที่ถนัดเช่น Editplus

ไฟล์ app/controllers/contents\_controller.php

```
<?php
class ContentsController extends AppController{
    var $name= ‘Contents’;

    function index(){
        $this->set (‘contents’, $this->Content->find (‘all’) ) ; //ส่งค่าให้แก่ view โดยกำหนดค่าให้กับตัวแปร contents
    }
}

```

วิกิตำรามีคู่มือในหัวข้อ ***เค้กพีเอชพี***


| * ด
* ค
* ก
โปรแกรมประยุกต์บนเว็บ |
| --- |
| 
* เปรียบเทียบ

 |
| ซีพลัสพลัส | 
* CppCMS
* Wt

 |
| CLI | 
* เอเอสพีดอตเน็ต
	+ Core
	+ เอแจ็กซ์
	+ Dynamic Data
	+ MVC
	+ Razor
	+ Web Forms
* DNN
* BFC
* MonoRail
* OpenRasta
* Umbraco

 |
| ColdFusion | 
* CFWheels
* ColdBox Platform
* ColdSpring
* Fusebox
* Mach-II
* Model-Glue

 |
| Common Lisp | 
* Caveman2
* CL-HTTP
* UnCommon Web
* Weblocks

 |
| D | 
* Vibe.d

 |
| Haskell | 
* Happstack
* Yesod
* Snap

 |
| Java | 
* AppFuse
* Flexive
* Grails
* GWT
* ICEfaces
* ItsNat
* JavaServer Faces
* JHipster
* Jspx
* JWt
* OpenXava
* Play
* Reasonable Server Faces
* Remote Application Platform
* RIFE
* Seam
* Spring
* Stripes
* Struts
* Tapestry
* Vaadin
* Vert.x
* WebWork
* Wicket
* WaveMaker
* ZK

 |
| จาวาสคริปต์ | 
* Ample SDK
* Angular/AngularJS
* Backbone.js
* Chaplin.js
* Closure
* Dojo Toolkit
* Ember.js
* Ext JS
* เจเควียรี
* Meteor
* MooTools
* Node.js
* Prototype
* React
* Rico
* script.aculo.us
* Sencha Touch
* SproutCore
* Wakanda

 |
| เพิร์ล | 
* Catalyst
* Dancer
* Mason
* Maypole
* Mojolicious
* WebGUI

 |
| พีเอชพี | 
* เค้กพีเอชพี
* โค้ดอิกไนเทอร์
* Fat-Free
* FuelPHP
* Gyroscope
* Horde
* Kohana
* Laravel
* Lithium
* Midgard
* MODX
* Nette
* Phalcon
* PRADO
* Qcodo
* Silex
* SilverStripe
* Symfony
* TYPO3
* Xaraya
* XOOPS
* Yii
* Zend Framework

 |
| ไพทอน | 
* BlueBream
* CherryPy
* Django
* Flask
* Grok
* Nevow
* Pyjs
* Pylons
* Pyramid
* Quixote
* TACTIC
* Tornado
* เทอร์โบเกียร์
* web2py
* Webware
* Zope 2

 |
| Ruby | 
* Camping
* Merb
* Padrino
* รูบีออนเรลส์
* Sinatra

 |
| Scala | 
* Lift
* Play
* Scalatra

 |
| สมอลล์ทอล์ก | 
* AIDA/Web
* Seaside

 |
| ภาษาอื่น ๆ | 
* Application Express (พีแอล/เอสคิวแอล)
* Grails (Groovy)
* Kepler (Lua)
* OpenACS (Tcl)
* SproutCore (JavaScript-Ruby)
* Yaws (Erlang)

 |