Kotchasan Framework Documentation
Kotchasan\Controller
Kotchasan\Controller
Controller เป็น base class สำหรับการสร้าง Controller ในระบบ MVC ของ Kotchasan Framework ซึ่งใช้เป็นจุดควบคุมการประมวลผลของแอปพลิเคชัน
สารบัญ
ภาพรวม
Controller class เป็น base class ที่ใช้สำหรับการสร้าง Controller ในระบบ MVC (Model-View-Controller) ของ Kotchasan Framework โดยทำหน้าที่:
- จัดการ Request และ Response: รับและประมวลผล HTTP requests
- เชื่อมต่อ Model และ View: เป็นตัวกลางระหว่าง business logic และ presentation layer
- การควบคุม Flow: จัดการลำดับการทำงานของแอปพลิเคชัน
- การจัดการข้อมูล: เตรียมข้อมูลสำหรับส่งไปยัง View
การติดตั้งและใช้งาน
ความต้องการ
- PHP 7.4 หรือสูงกว่า
- Kotchasan Framework
- การตั้งค่า autoloader
การสร้าง Controller
use Kotchasan\Controller;
// สร้าง Controller โดยการสืบทอด
class UserController extends Controller
{
public function index()
{
// Logic สำหรับหน้า index
return "Welcome to User Controller";
}
public function show($id)
{
// Logic สำหรับแสดงข้อมูลผู้ใช้
return "User ID: " . $id;
}
}เมธอดหลัก
create()
สร้าง instance ใหม่ของ Controller
Signature:
class ExampleClass {
<?php
public static function create(): static;
}การใช้งาน:
// สร้าง instance ใหม่
$controller = Controller::create();
// หรือใช้กับ child class
$userController = UserController::create();ตัวอย่าง:
class ProductController extends Controller
{
public function listProducts()
{
// สร้าง instance ของ controller
$controller = self::create();
// ดึงข้อมูลสินค้า
$products = $this->getProducts();
// ส่งข้อมูลไปยัง view
return $this->render('products/list', [
'products' => $products
]);
}
}ตัวอย่างการใช้งาน
1. Controller พื้นฐาน
use Kotchasan\Controller;
use Kotchasan\View;
class HomeController extends Controller
{
/
หน้าแรกของเว็บไซต์
/
public function index()
{
// สร้าง view
$view = View::create();
// ตั้งค่า title
$view->setContents([
'/{TITLE}/' => 'หน้าแรก',
'/{CONTENT}/' => 'ยินดีต้อนรับสู่เว็บไซต์ของเรา'
]);
// render HTML
return $view->renderHTML();
}
}2. Controller พร้อม Database Integration
use Kotchasan\Controller;
use Kotchasan\Database;
use Kotchasan\Http\Request;
class ArticleController extends Controller
{
/
แสดงรายการบทความ
/
public function index(Request $request)
{
// ดึงข้อมูลจากฐานข้อมูล
$db = Kotchasan\Database::create();
$articles = $db->select()
->from('articles')
->where(['status', 1])
->order('created_at DESC')
->limit(10)
->toArray();
// ส่งข้อมูลไปยัง view
$view = View::create();
$view->setContents([
'/{TITLE}/' => 'บทความทั้งหมด',
'/{ARTICLES}/' => $this->renderArticleList($articles)
]);
return $view->renderHTML();
}
/
แสดงบทความเดี่ยว
/
public function show(Request $request)
{
$id = $request->get('id')->toInt();
// ค้นหาบทความ
$db = Kotchasan\Database::create();
$article = $db->select()
->from('articles')
->where(['id', $id], ['status', 1])
->first();
if (!$article) {
throw new \Exception('Article not found', 404);
}
// แสดงบทความ
$view = View::create();
$view->setContents([
'/{TITLE}/' => $article->title,
'/{CONTENT}/' => $article->content
]);
return $view->renderHTML();
}
/
Render รายการบทความ
/
private function renderArticleList($articles)
{
$html = '<div class="articles">';
foreach ($articles as $article) {
$html .= '<div class="article-item">';
$html .= '<h3><a href="?module=article&action=show&id='.$article->id.'">'.$article->title.'</a></h3>';
$html .= '<p>'.substr($article->content, 0, 150).'...</p>';
$html .= '</div>';
}
$html .= '</div>';
return $html;
}
}3. Controller สำหรับ Form Handling
use Kotchasan\Database;
<?php
use Kotchasan\Controller;
use Kotchasan\Http\Request;
use Kotchasan\Input;
class ContactController extends Controller
{
/
แสดงฟอร์มติดต่อ
/
public function form()
{
$view = View::create();
$view->setContents([
'/{TITLE}/' => 'ติดต่อเรา',
'/{FORM}/' => $this->renderContactForm()
]);
return $view->renderHTML();
}
/
จัดการการส่งฟอร์ม
/
public function submit(Request $request)
{
$input = new Input($request);
// กำหนด validation rules
$input->rules([
'name' => 'required|string|min:2',
'email' => 'required|email',
'message' => 'required|string|min:10'
]);
// ตรวจสอบข้อมูล
if (!$input->validate()) {
return $this->showErrors($input->getErrors());
}
// บันทึกข้อความ
$db = Kotchasan\Database::create();
$db->insert('contacts')
->values([
'name' => $input->getString('name'),
'email' => $input->getString('email'),
'message' => $input->getString('message'),
'created_at' => date('Y-m-d H:i:s')
])
->execute();
// แสดงหน้าขอบคุณ
return $this->showThankYou();
}
private function renderContactForm()
{
return '
<form method="post" action="?module=contact&action=submit">
<p>
<label>ชื่อ:</label>
<input type="text" name="name" required>
</p>
<p>
<label>อีเมล:</label>
<input type="email" name="email" required>
</p>
<p>
<label>ข้อความ:</label>
<textarea name="message" required></textarea>
</p>
<p>
<button type="submit">ส่งข้อความ</button>
</p>
</form>';
}
}4. API Controller
use Kotchasan\Database;
<?php
use Kotchasan\Controller;
use Kotchasan\Http\Request;
use Kotchasan\Http\Response;
class ApiController extends Controller
{
/
API endpoint สำหรับดึงข้อมูลผู้ใช้
/
public function getUsers(Request $request)
{
try {
// ตรวจสอบ authentication
$this->authenticateApi($request);
// ดึงข้อมูล
$db = Kotchasan\Database::create();
$users = $db->select(['id', 'name', 'email'])
->from('users')
->where(['active', 1])
->toArray();
// ส่งกลับเป็น JSON
return Response::json([
'success' => true,
'data' => $users
]);
} catch (\Exception $e) {
return Response::json([
'success' => false,
'error' => $e->getMessage()
], 400);
}
}
private function authenticateApi(Request $request)
{
$token = $request->getHeader('Authorization');
if (!$token || !$this->validateApiToken($token)) {
throw new \Exception('Unauthorized', 401);
}
}
}Best Practices
1. การจัดโครงสร้าง Controller
// ใช้ namespace ที่เหมาะสม
namespace App\Controllers;
use Kotchasan\Controller;
class UserController extends Controller
{
// จัดกลุ่ม methods ตามหน้าที่
// Public actions
public function index() { }
public function show() { }
public function create() { }
// Protected helper methods
protected function validateUser($data) { }
protected function sendNotification($user) { }
// Private utility methods
private function formatUserData($user) { }
}2. Error Handling
class OrderController extends Controller
{
public function process(Request $request)
{
try {
// ประมวลผลคำสั่งซื้อ
$this->validateOrder($request);
$order = $this->createOrder($request);
$this->sendConfirmation($order);
return $this->success('Order processed successfully');
} catch (ValidationException $e) {
return $this->error('Validation failed: ' . $e->getMessage(), 400);
} catch (PaymentException $e) {
return $this->error('Payment failed: ' . $e->getMessage(), 402);
} catch (\Exception $e) {
// Log error
error_log('Order processing failed: ' . $e->getMessage());
return $this->error('Internal server error', 500);
}
}
}3. Dependency Injection
class ProductController extends Controller
{
private $productService;
private $categoryService;
public function __construct(ProductService $productService, CategoryService $categoryService)
{
$this->productService = $productService;
$this->categoryService = $categoryService;
}
public function index()
{
$products = $this->productService->getAllProducts();
$categories = $this->categoryService->getAllCategories();
// ส่งข้อมูลไปยัง view
return $this->render('products/index', compact('products', 'categories'));
}
}4. การใช้ Middleware
class AdminController extends Controller
{
public function __construct()
{
// ตรวจสอบสิทธิ์ admin ก่อนทุก action
$this->middleware('auth.admin');
}
public function dashboard()
{
// เฉพาะ admin เท่านั้นที่เข้าถึงได้
return $this->render('admin/dashboard');
}
}ข้อควรระวัง
- Security: ตรวจสอบ input และสิทธิ์การเข้าถึงเสมอ
- Performance: หลีกเลี่ยงการทำงานหนักใน Controller ควรส่งไปยัง Service layer
- Separation of Concerns: แยก business logic ออกจาก Controller
- Error Handling: จัดการ exceptions อย่างเหมาะสม
คลาสที่เกี่ยวข้อง
- View - สำหรับการแสดงผล HTML
- ApiController - Controller สำหรับ API
- Request - จัดการ HTTP Request
- Response - จัดการ HTTP Response
- Model - Model สำหรับฐานข้อมูล
- Input - สำหรับ validation input
ตัวอย่างเพิ่มเติม
ดูตัวอย่างการใช้งาน MVC pattern ใน MVC Guide และ Web Development Basics