CodeIgniter คืออะไร?
CodeIgniter (CI) เป็น PHP Framework ที่มีขนาดเบา รวดเร็ว และใช้งานง่าย โดยใช้รูปแบบ MVC (Model-View-Controller) ในการพัฒนา เหมาะสำหรับการพัฒนาเว็บแอปพลิเคชันทั้งขนาดเล็กและขนาดกลาง
การติดตั้ง CodeIgniter
# ใช้ Composer composer create-project codeigniter4/appstarter project-name # หรือดาวน์โหลดจาก website # https://codeigniter.com/download
โครงสร้างโฟลเดอร์พื้นฐาน
project/ ├── app/ │ ├── Config/ │ ├── Controllers/ │ ├── Models/ │ └── Views/ ├── public/ ├── system/ └── writable/
Auto Routing ใน CodeIgniter 4
1. Auto Routing Legacy (แบบเดิม)
// app/Config/Routes.php $routes->setAutoRoute(true);
การทำงานของ Auto Routing แบบเดิม:
URL: example.com/products/show/123 จะถูกแปลงเป็น: Controller: Products Method: show Parameter: 123
2. Auto Routing Improved (แบบใหม่ใน CI4)
// app/Config/Routing.php public bool $autoRoute = true;
ตัวอย่าง Controller:
// app/Controllers/Blog.php
namespace App\Controllers;
class Blog extends BaseController
{
    public function index()
    {
        return view('blog/list');
    }
    public function show($id)
    {
        return view('blog/detail', ['id' => $id]);
    }
    public function category($type, $id)
    {
        return "Category: $type, ID: $id";
    }
}
รูปแบบ URL ที่จะทำงาน:
/blog            -> Blog::index()
/blog/show/123   -> Blog::show(123)
/blog/category/news/5  -> Blog::category('news', 5)
การกำหนด Routes แบบ Manual
1. Routes พื้นฐาน
// app/Config/Routes.php
$routes->get('/', 'Home::index');
$routes->get('blog', 'Blog::index');
$routes->get('blog/(:num)', 'Blog::show/$1');
$routes->post('blog/create', 'Blog::create');
2. Routes แบบมีเงื่อนไข
// Routes with constraints
$routes->get('users/(:num)', 'Users::show/$1');
$routes->get('blog/(:alpha)', 'Blog::category/$1');
$routes->get('posts/(:segment)', 'Posts::view/$1');
3. Routes Groups
$routes->group('admin', ['filter' => 'auth'], function($routes) {
    $routes->get('users', 'Admin\Users::index');
    $routes->get('posts', 'Admin\Posts::index');
    $routes->get('settings', 'Admin\Settings::index');
});
ตัวอย่างการใช้งาน Controller กับ Auto Routing
1. Controller พื้นฐาน
namespace App\Controllers;
class Product extends BaseController
{
    public function index()
    {
        // แสดงรายการสินค้าทั้งหมด
        return view('products/list');
    }
    public function show($id)
    {
        // แสดงรายละเอียดสินค้า
        $model = new \App\Models\ProductModel();
        $data['product'] = $model->find($id);
        return view('products/detail', $data);
    }
    public function create()
    {
        // แสดงฟอร์มสร้างสินค้า
        return view('products/create');
    }
    public function store()
    {
        // บันทึกข้อมูลสินค้า
        $model = new \App\Models\ProductModel();
        $data = $this->request->getPost();
        
        if ($model->save($data)) {
            return redirect()->to('/products');
        }
    }
}
2. การใช้ Filters กับ Auto Routing
// app/Filters/AuthFilter.php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AuthFilter implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        if (!session()->get('logged_in')) {
            return redirect()->to('/login');
        }
    }
    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        // ทำงานหลังจาก controller ทำงานเสร็จ
    }
}
3. การกำหนด Filters ใน Routes
// app/Config/Filters.php
public $filters = [
    'auth' => \App\Filters\AuthFilter::class
];
// app/Config/Routes.php
$routes->get('admin/*', 'Admin\Dashboard::index', ['filter' => 'auth']);
ข้อควรระวังในการใช้ Auto Routing
- ความปลอดภัย
- Auto routing อาจทำให้เข้าถึง methods ที่ไม่ต้องการให้เข้าถึงได้
- ควรใช้ filters หรือ access controls เพื่อป้องกัน
- การตั้งชื่อ Method
- Methods ที่ขึ้นต้นด้วย underscore (_) จะไม่สามารถเข้าถึงผ่าน URL ได้
- ควรใช้สำหรับ private methods
- Performance
- Auto routing ต้องค้นหา controller และ method ตาม URL
- อาจช้ากว่าการกำหนด routes แบบ manual เล็กน้อย
แนวทางการใช้งานที่แนะนำ
- สำหรับโปรเจคขนาดเล็ก
- เปิดใช้ Auto Routing เพื่อความสะดวก
- ใช้ filters สำหรับการควบคุมการเข้าถึง
- สำหรับโปรเจคขนาดใหญ่
- ปิด Auto Routing
- กำหนด Routes แบบ manual
- ใช้ Route Groups จัดการ URLs
- การจัดการ Security
// ตั้งค่า private methods
class Blog extends BaseController
{
    private function _updateStats()
    {
        // method นี้ไม่สามารถเข้าถึงผ่าน URL ได้
    }
}
// ใช้ filters สำหรับการควบคุมการเข้าถึง
$routes->get('admin/*', 'Admin\Dashboard::index', ['filter' => 'auth']);
 




















Leave a Reply