ทำให้ใช้ $_GET ได้ใน codeigniter

ทำให้ใช้ $_GET ได้ใน codeigniter

ปกติแล้ว เมื่อเราใช้ codeigniter เราก็จะเลิกการใช้งาน ตัวแปรแบบ get ไป เพราะว่าเราสามารถเอาค่าใส่เข้าไปในตัวแปรได้ตรงๆ ตัวอย่างแบบ ปัจจุบันที่เราจะใช้งานแบบนี้ site.com/index.php?test=123456 ก็คือการส่งค่าเบบ get โดยส่งค่า 123456 เข้าไปที่ตัวแปร test นั่นเอง แต่พอเรามาใช้งาน codeigniter เราจะเขียนแค่ site.com/index/123456 โดยในโค้ดเราก็กำหนดให้เรียก $this->uri->segment(2); เข้ามาใช้ แทนการเรียก $_GET['test'] แบบเดิม ทำให้ url สวยขึ้นมาเลย

แต่นั่นก็แฝงปัญหาตามมาด้วย เพราะว่าหากเว็บเราเองไม่ได้ใช้ก็คงไม่เป็นไร แต่ว่าหากมีการเชื่อม API ไปกับระบบข้างนอกบางระบบแล้วล่ะก็ ความซวยจะมาเยือนเอาครับ ตัวอย่างง่ายๆคือคู่ปรับเก่าของผม เจ้า facebook.com นั่นเอง เพราะว่ามันมีการส่งค่ากลับมาเป็นแบบ get เท่านั้น ย้ำอีกครั้ง แบบ get เท่านั้น ได้เซ็งกันก็คราวนี้

ดังนั้นก็เลยต้องทำให้ codeigniter กลับมายอมรับการใช้งาน ตัวแปรแบบ get ได้ รวมทั้งยังต้องรักษาสภาพให้ใช้งานแบบ uri segment ในแบบของ codeigniter ได้ทั้งคู่ด้วย อย่ารอช้ามาทำเลย

เริ่มจาก แก้ไฟล์ config.php ก่อน อยุ่ใน /system/application/config/config.php โดยให้แก้สองจุด ตามสองบรรทัดนี้เลย

$config['uri_protocol']    = "PATH_INFO"; $config['permitted_uri_chars'] = 'a-z 0-9~%?=&.:_\-';

จากนั้นเราจะทำการ Override Class ของ Codeigniter ในการรับค่า input ครับ โดยการสร้างไฟล์เพิ่ม ชื่อว่า MY_Input.php สร้างไว้ใน system\application\libraries โดยใส่โค้ดดังนี้

<?php class MY_Input extends CI_Input {  function _sanitize_globals()  {  $this->allow_get_array = TRUE;  parent::_sanitize_globals();  } }

 เท่านี้ เราก็ทดสอบได้เลย โดยตังอย่างก็คือใส่ URL ผสมทั้งแบบ get และ uri segment ได้เลย เช่น

http://www.com/welcome/function/seg1/seg2/?test=123456&bbbb=654321

เท่านี้เราก็พร้อมรับมือกับการรับค่าแบบ get แล้ว

Create: Modify : 2011-01-18 17:35:00 Read : 8891 URL :