
ลบ index.php และทำความเข้าใจ url ใน codeigniter
หลังจากที่เราเขียนเว็บด้วย codeigniter ได้แล้ว ความพอใจของเราก็ยังไม่มีที่สิ้นสุด เราก็ค่อยปรับมันไปเรื่อยๆ อย่างวันนี้ก็จะมาพูดเรื่อง url ของ codeigniter ซึ่งเป็นอีกเรื่องที่สำคัญมากของ codeigniter เพราะว่า url เป็นสิ่งที่มีผลกระทบต่อการทำงานโดยตรงของ php framework ตัวนี้ครับ
การตัด index.php ออก
เดิมทีระบบของ codeigniter เวลารันเว็บจะติด index.php มาด้วย เช่น /index.php/show/26 ซึ่งเป็นที่น่ารำคาญ ดังนั้น เราจะตัดมันออกโดยการสร้างไฟล์ .htaccess ขึ้นมา แล้วใส่โค้ดว่า
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
แล้ววาง .htaccess ไว้ที่ root เว็บ(ชั้นแรกสุดที่มีไฟล์ index.php) ตอนนี้เว็บเราก็จะทำงานได้ทั้งมี /index.php/ และไม่มี /index.php/ ลองทดสอบดูก่อน แต่ถ้าเป็น windows hosting ต้องแสดงความเสียใจด้วยนะครับ เพราะว่า windows hosting โดยปกติจะไม่มี mod rewrite ครับ โดยเฉพาะเมื่อรัน webhost ด้วย IIS (เพราะว่าถ้าเป็น windows hosting รันด้วย apache อาจจะมี mod rewrite ครับ)
แต่เราจะ config เพิ่ม ในไฟล์ /application/config/config.php โดยลบ index.php จากตัวแปร $config['index_page'] ออกด้วยครับ ก็คือเดิมจะเป็น $config['index_page'] = 'index.php'; เราก็ลบให้เหลือ $config['index_page'] = ''; เท่านั้นพอ url เราก็จะสวยขึ้นแล้ว
การนับ segment
ใน codeigniter จะตัด url ที่เป็นแบบ get ออกไป เช่น show.php?id=26 ถ้าเป็น codeigniter แล้ว เค้าจะเขียนแค่ /show/26 จะเห็นได้ว่าสั้นกว่ากันเยอะเลย แล้วค่าที่ได้ ก็เอาไปใช้งานได้ง่าย เพียงแค่ใช้การนับตำแหน่งของ / เท่านั้น ตัวอย่าง meewebfree.com/site/php-codeigniter/375-step2-with-codeigniter-model-database ถ้าในระบบ codeigniter เราจะนับ segment ได้ดังนี้
- site
- php-codeigniter
- 375-step2-with-codeigniter-model-database
เวลาเอามาใช้ ก็ง่ายมาก หากเราอยากได้ค่า 375-step2-with-codeigniter-model-database มาใช้ (หรือ segment 3) เราก็เขียนได้ว่า $this->uri->segment(3) แค่นี้เองครับ ด้วยเทคนิคนี้ เราก็จะมี url ที่สวยงาม โดยเราก็เป็นคนกำหนดเองได้ตามใจเลย ว่าแต่ละ segment จะแทนด้วยค่าอะไร
แต่มีข้อควรระวังก็คือ segment 1 กับ segment 2 นั่นจะเป็น controller กับ function ตามลำดับนั่นเอง (ตามที่เรารู้กันอยู๋แล้ว) เราจึงมักจะใช้งานที่ segment 3 เป็นต้นไปในการกำหนดค่าครับ โดยจะมีกี่ segment ก็ได้มากมายให้ใช้งานได้เหลือเฟือ แต่ละ segment แยกกันด้วยเครื่องหมาย / นั่นเอง ดังนั้นอย่าเผลอใส่ค่าใน url ให้มีเครื่องหมาย / โดยไม่ได้ตั้งใจก็แล้วกัน เพราะว่ามันจะกลายเป็นการแยก segment ออกในทันทีเลย
นี่ก็เป็นอีก 1 เรื่องใหญ่ๆที่เราควรเรียนรู้เมื่อใช้งาน codeigniter ที่แตกต่างจากการเขียนเว็บปกติครับ