Kotchasan Framework Documentation

Kotchasan Framework Documentation

Kotchasan\Controller

TH 07 Feb 2026 02:14

Kotchasan\Controller

Controller เป็น base class สำหรับการสร้าง Controller ในระบบ MVC ของ Kotchasan Framework ซึ่งใช้เป็นจุดควบคุมการประมวลผลของแอปพลิเคชัน

สารบัญ

  1. ภาพรวม
  2. การติดตั้งและใช้งาน
  3. เมธอดหลัก
  4. ตัวอย่างการใช้งาน
  5. Best Practices
  6. คลาสที่เกี่ยวข้อง

ภาพรวม

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');
    }
}

ข้อควรระวัง

  1. Security: ตรวจสอบ input และสิทธิ์การเข้าถึงเสมอ
  2. Performance: หลีกเลี่ยงการทำงานหนักใน Controller ควรส่งไปยัง Service layer
  3. Separation of Concerns: แยก business logic ออกจาก Controller
  4. 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