CodeIgniter - แนวคิดพื้นฐาน
ตัวควบคุม
คอนโทรลเลอร์คือไฟล์คลาสธรรมดา ตามชื่อที่แนะนำมันควบคุมแอปพลิเคชันทั้งหมดโดย URI
การสร้างคอนโทรลเลอร์
ก่อนอื่นไปที่ application/controllersโฟลเดอร์ คุณจะพบไฟล์สองไฟล์ที่นั่นindex.html และ Welcome.php. ไฟล์เหล่านี้มาพร้อมกับ CodeIgniter
เก็บไฟล์เหล่านี้ไว้เหมือนเดิม สร้างไฟล์ใหม่ภายใต้เส้นทางเดียวกันชื่อ“Test.php”. เขียนรหัสต่อไปนี้ในไฟล์นั้น -
<?php
class Test extends CI_Controller {
public function index() {
echo "Hello World!";
}
}
?>
Test คลาสขยายคลาสในตัวที่เรียกว่า CI_Controller. คลาสนี้ต้องขยายทุกครั้งที่คุณต้องการสร้างคลาส Controller ของคุณเอง
เรียกคอนโทรลเลอร์
URI สามารถเรียกคอนโทรลเลอร์ข้างต้นได้ดังนี้ -
http://www.your-domain.com/index.php/test
สังเกตคำว่า“test” ใน URI ด้านบนหลัง index.php สิ่งนี้ระบุชื่อคลาสของคอนโทรลเลอร์ ตามที่เราได้ตั้งชื่อตัวควบคุม "Test"เรากำลังเขียน"test” หลัง index.php. ชื่อชั้นเรียนต้องขึ้นต้นด้วยuppercase letter แต่เราต้องเขียน lowercase letterเมื่อเราเรียกตัวควบคุมนั้นโดย URI ไวยากรณ์ทั่วไปสำหรับการเรียกคอนโทรลเลอร์มีดังนี้ -
http://www.your-domain.com/index.php/controller/method-name
การสร้างและเรียกวิธีการสร้างตัวสร้าง
ให้เราแก้ไขคลาสด้านบนและสร้างเมธอดอื่นชื่อ“ สวัสดี”
<?php
class Test extends CI_Controller {
public function index() {
echo "This is default function.";
}
public function hello() {
echo "This is hello function.";
}
}
?>
เราสามารถเรียกใช้คอนโทรลเลอร์ข้างต้นได้สามวิธีดังต่อไปนี้ -
- http://www.your-domain.com/index.php/test
- http://www.your-domain.com/index.php/test/index
- http://www.your-domain.com/index.php/test/hello
หลังจากเยี่ยมชม URI แรกในเบราว์เซอร์เราจะได้ผลลัพธ์ตามที่แสดงในภาพด้านล่าง อย่างที่คุณเห็นเราได้ผลลัพธ์ของวิธีการ“index” แม้ว่าเราจะไม่ผ่านชื่อของวิธีการ URI ก็ตาม เราใช้เฉพาะชื่อคอนโทรลเลอร์ใน URI ในสถานการณ์เช่นนี้ CodeIgniter เรียกเมธอดเริ่มต้นว่า“index”.
เยี่ยมชม URI ที่สองในเบราว์เซอร์เราจะได้ผลลัพธ์เดียวกันดังที่แสดงในภาพด้านบน ที่นี่เราได้ส่งชื่อเมธอดหลังชื่อคอนโทรลเลอร์ใน URI ตามชื่อของวิธีการคือ“index” เราได้ผลลัพธ์เดียวกัน
เยี่ยมชม URI ที่สามในเบราว์เซอร์เราจะได้ผลลัพธ์ตามที่แสดงในภาพด้านล่าง อย่างที่คุณเห็นเรากำลังได้รับผลลัพธ์ของวิธีการ "hello"เพราะเราผ่าน"hello” เป็นชื่อวิธีการหลังชื่อตัวควบคุม“test” ใน URI
สิ่งที่ต้องจำ
ชื่อของคลาสคอนโทรลเลอร์ต้องขึ้นต้นด้วยอักษรตัวพิมพ์ใหญ่
ต้องเรียกตัวควบคุมด้วยอักษรตัวพิมพ์เล็ก
อย่าใช้ชื่อเมธอดเดียวกันกับคลาสพาเรนต์ของคุณเนื่องจากมันจะลบล้างฟังก์ชันการทำงานของคลาสพาเรนต์
มุมมอง
อาจเป็นหน้าเว็บที่เรียบง่ายหรือซับซ้อนซึ่งผู้ควบคุมสามารถเรียกใช้ได้ หน้าเว็บอาจมีส่วนหัวส่วนท้ายแถบด้านข้างเป็นต้นไม่สามารถเรียกดูได้โดยตรง ให้เราสร้างมุมมองง่ายๆ สร้างไฟล์ใหม่ภายใต้application/views ด้วยชื่อ“test.php” และคัดลอกโค้ดที่ระบุด้านล่างในไฟล์นั้น
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter View Example</title>
</head>
<body>
CodeIgniter View Example
</body>
</html>
เปลี่ยนรหัสของ application/controllers/test.php ตามที่แสดงด้านล่าง
กำลังโหลดมุมมอง
สามารถโหลดมุมมองได้โดยใช้ไวยากรณ์ต่อไปนี้ -
$this->load->view('name');
โดยที่ name คือไฟล์มุมมองซึ่งกำลังแสดงผล หากคุณวางแผนที่จะจัดเก็บไฟล์มุมมองในไดเร็กทอรีบางรายการคุณสามารถใช้ไวยากรณ์ต่อไปนี้ -
$this->load->view('directory-name/name');
ไม่จำเป็นต้องระบุนามสกุลเป็น php เว้นแต่จะใช้อย่างอื่นที่ไม่ใช่. php
เมธอด index () เรียกเมธอด view และส่ง "test" เป็นอาร์กิวเมนต์ to view () method เนื่องจากเราเก็บการเข้ารหัส html ไว้ใน "test.php” ภายใต้ไฟล์ application/views/test.php.
<?php
class Test extends CI_Controller {
public function index() {
$this->load->view('test');
}
}
?>
นี่คือผลลัพธ์ของรหัสด้านบน -
ผังงานต่อไปนี้แสดงให้เห็นว่าทุกอย่างทำงานอย่างไร -
โมเดล
คลาสโมเดลถูกออกแบบมาเพื่อทำงานกับข้อมูลในฐานข้อมูล ตัวอย่างเช่นหากคุณใช้ CodeIgniter เพื่อจัดการผู้ใช้ในแอปพลิเคชันของคุณคุณต้องมีคลาสโมเดลซึ่งมีฟังก์ชันในการแทรกลบอัปเดตและดึงข้อมูลผู้ใช้ของคุณ
การสร้างคลาสโมเดล
คลาสโมเดลจะถูกเก็บไว้ใน application/modelsไดเรกทอรี โค้ดต่อไปนี้แสดงวิธีสร้างคลาสโมเดลใน CodeIgniter
<?php
Class Model_name extends CI_Model {
Public function __construct() {
parent::__construct();
}
}
?>
โดยที่ Model_name คือชื่อของคลาสโมเดลที่คุณต้องการให้ คลาสโมเดลแต่ละคลาสต้องสืบทอดคลาส CI_Model ของ CodeIgniter อักษรตัวแรกของคลาสโมเดลต้องเป็นตัวพิมพ์ใหญ่ ต่อไปนี้เป็นรหัสสำหรับคลาสโมเดลของผู้ใช้
<?php
Class User_model extends CI_Model {
Public function __construct() {
parent::__construct();
}
}
?>
ต้องบันทึกคลาสโมเดลด้านบนเป็น User_model.php ชื่อคลาสและชื่อไฟล์ต้องเหมือนกัน
กำลังโหลดโมเดล
สามารถเรียกโมเดลในคอนโทรลเลอร์ได้ รหัสต่อไปนี้สามารถใช้เพื่อโหลดรุ่นใดก็ได้
$this->load->model('model_name');
โดย model_name คือชื่อของโมเดลที่จะโหลด หลังจากโหลดโมเดลแล้วคุณสามารถเรียกใช้ method ดังที่แสดงด้านล่าง
$this->model_name->method();
โหลดโมเดลอัตโนมัติ
อาจมีสถานการณ์ที่คุณต้องการคลาสโมเดลในแอปพลิเคชันของคุณ ในสถานการณ์เช่นนี้จะดีกว่าถ้าเราโหลดอัตโนมัติ
/*
| ---------------------------------------------------------------
| Auto-Load Models
| ---------------------------------------------------------------
| Prototype:
|
| $autoload['model'] = array('first_model', 'second_model');
|
| You can also supply an alternative model name to be assigned
| in the controller:
|
| $autoload['model'] = array('first_model' => 'first');
*/
$autoload['model'] = array();
ดังที่แสดงในรูปด้านบนส่งชื่อของโมเดลในอาร์เรย์ที่คุณต้องการโหลดอัตโนมัติและจะถูกโหลดอัตโนมัติในขณะที่ระบบอยู่ในสถานะเริ่มต้นและสามารถเข้าถึงได้ทั่วทั้งแอปพลิเคชัน
ผู้ช่วยเหลือ
ตามชื่อที่แนะนำมันจะช่วยคุณสร้างระบบของคุณ แบ่งออกเป็นฟังก์ชั่นเล็ก ๆ เพื่อรองรับการทำงานที่แตกต่างกัน ตัวช่วยจำนวนมากมีอยู่ใน CodeIgniter ซึ่งแสดงอยู่ในตารางด้านล่าง เราสามารถสร้างตัวช่วยของเราเองได้เช่นกัน
โดยทั่วไปแล้วผู้ช่วยเหลือจะถูกเก็บไว้ในไฟล์ system/helpers, หรือ application/helpers directory. ตัวช่วยแบบกำหนดเองจะถูกเก็บไว้ในapplication/helpers ไดเร็กทอรีและตัวช่วยของระบบจะถูกเก็บไว้ใน system/helpersไดเรกทอรี CodeIgniter จะปรากฏเป็นอันดับแรกในไฟล์application/helpers directory. หากไม่มีไดเร็กทอรีหรือไม่มีตัวช่วยที่ระบุ CodeIgniter จะดูใน global ของคุณแทนsystem/helpers/ directory. ผู้ช่วยแต่ละคนไม่ว่าจะเป็นผู้ช่วยแบบกำหนดเองหรือผู้ช่วยระบบต้องโหลดก่อนใช้งาน
SN | ชื่อผู้ช่วยและคำอธิบาย |
---|---|
1 | Array Helper ไฟล์ Array Helper มีฟังก์ชันที่ช่วยในการทำงานกับอาร์เรย์ |
2 | CAPTCHA Helper ไฟล์ CAPTCHA Helper มีฟังก์ชันที่ช่วยในการสร้างภาพ CAPTCHA |
3 | Cookie Helper ไฟล์ Cookie Helper มีฟังก์ชันที่ช่วยในการทำงานกับคุกกี้ |
4 | Date Helper ไฟล์ Date Helper มีฟังก์ชันที่ช่วยคุณทำงานกับวันที่ |
5 | Directory Helper ไฟล์ Directory Helper มีฟังก์ชันที่ช่วยในการทำงานกับไดเร็กทอรี |
6 | Download Helper โปรแกรมช่วยดาวน์โหลดช่วยให้คุณสามารถดาวน์โหลดข้อมูลไปยังเดสก์ท็อปของคุณ |
7 | Email Helper โปรแกรมช่วยอีเมลมีฟังก์ชันช่วยเหลือบางอย่างสำหรับการทำงานกับอีเมล สำหรับโซลูชันอีเมลที่มีประสิทธิภาพยิ่งขึ้นโปรดดูที่คลาสอีเมลของ CodeIgniter |
8 | File Helper ไฟล์ File Helper มีฟังก์ชันที่ช่วยในการทำงานกับไฟล์ |
9 | Form Helper ไฟล์ Form Helper มีฟังก์ชันที่ช่วยในการทำงานกับฟอร์ม |
10 | HTML Helper ไฟล์ HTML Helper มีฟังก์ชันที่ช่วยในการทำงานกับ HTML |
11 | Inflector Helper ไฟล์ Inflector Helper มีฟังก์ชันที่อนุญาตให้คุณเปลี่ยนคำเป็นพหูพจน์, เอกพจน์, อูฐและอื่น ๆ |
12 | Language Helper ไฟล์ Language Helper มีฟังก์ชันที่ช่วยในการทำงานกับไฟล์ภาษา |
13 | Number Helper ไฟล์ Number Helper มีฟังก์ชันที่ช่วยคุณทำงานกับข้อมูลตัวเลข |
14 | Path Helper ไฟล์ Path Helper มีฟังก์ชันที่อนุญาตให้คุณทำงานกับเส้นทางไฟล์บนเซิร์ฟเวอร์ |
15 | Security Helper ไฟล์ตัวช่วยความปลอดภัยมีฟังก์ชันที่เกี่ยวข้องกับความปลอดภัย |
16 | Smiley Helper ไฟล์ Smiley Helper มีฟังก์ชันที่ให้คุณจัดการรอยยิ้ม (อีโมติคอน) |
17 | String Helper ไฟล์ String Helper มีฟังก์ชันที่ช่วยในการทำงานกับสตริง |
18 | Text Helper ไฟล์ Text Helper มีฟังก์ชันที่ช่วยในการทำงานกับข้อความ |
19 | Typography Helper ไฟล์ Typography Helper มีฟังก์ชันที่ช่วยจัดรูปแบบข้อความของคุณในรูปแบบที่เกี่ยวข้องกับความหมาย |
20 | URL Helper ไฟล์ URL Helper มีฟังก์ชันที่ช่วยในการทำงานกับ URL |
21 | XML Helper ไฟล์ XML Helper มีฟังก์ชันที่ช่วยในการทำงานกับข้อมูล XML |
กำลังโหลดตัวช่วย
สามารถโหลดตัวช่วยได้ตามที่แสดงด้านล่าง -
$this->load->helper('name');
ชื่อของผู้ช่วยเหลืออยู่ที่ไหน ตัวอย่างเช่นหากคุณต้องการโหลดตัวช่วย URL ก็สามารถโหลดเป็น -
$this->load->helper('url');
การกำหนดเส้นทาง
CodeIgniter มีระบบกำหนดเส้นทาง URI ที่ใช้งานง่ายเพื่อให้คุณสามารถกำหนดเส้นทาง URL ใหม่ได้อย่างง่ายดาย โดยทั่วไปแล้วจะมีความสัมพันธ์แบบหนึ่งต่อกลุ่มระหว่างสตริง URL และคลาส / วิธีการควบคุมที่สอดคล้องกัน กลุ่มใน URI มักจะเป็นไปตามรูปแบบนี้ -
your-domain.com/class/method/id/
first segment แสดงถึงคลาสคอนโทรลเลอร์ที่ควรเรียกใช้
second segment แสดงถึงฟังก์ชันคลาสหรือวิธีการที่ควรเรียกใช้
thirdและส่วนเพิ่มเติมใด ๆ แสดงถึง ID และตัวแปรใด ๆ ที่จะส่งต่อไปยังคอนโทรลเลอร์
ในบางสถานการณ์คุณอาจต้องการเปลี่ยนกลไกการกำหนดเส้นทางเริ่มต้นนี้ CodeIgniter ให้สิ่งอำนวยความสะดวกซึ่งคุณสามารถกำหนดกฎการกำหนดเส้นทางของคุณเอง
ปรับแต่งกฎการกำหนดเส้นทาง
มีไฟล์เฉพาะที่คุณสามารถจัดการสิ่งเหล่านี้ได้ ไฟล์อยู่ที่ application / config / route.php คุณจะพบอาร์เรย์ที่เรียกว่า $ route ซึ่งคุณสามารถกำหนดกฎการกำหนดเส้นทางของคุณเองได้ คีย์ในอาร์เรย์ $ route จะตัดสินใจว่าจะกำหนดเส้นทางอะไรและค่าจะกำหนดว่าจะกำหนดเส้นทางไปที่ใด มีเส้นทางที่สงวนไว้สามเส้นทางใน CodeIgniter
SN | เส้นทางและคำอธิบายที่สงวนไว้ |
---|---|
1 | $route['default_controller'] เส้นทางนี้ระบุว่าควรโหลดคลาสคอนโทรลเลอร์ใดหาก URI ไม่มีข้อมูลซึ่งจะเป็นกรณีที่ผู้ใช้โหลดรูท URL ของคุณ คุณควรมีเส้นทางเริ่มต้นมิฉะนั้นหน้า 404 จะปรากฏขึ้นโดยค่าเริ่มต้น เราสามารถตั้งค่าโฮมเพจของเว็บไซต์ได้ที่นี่เพื่อให้โหลดโดยค่าเริ่มต้น |
2 | $route['404_override'] เส้นทางนี้ระบุว่าควรโหลดคลาสคอนโทรลเลอร์ใดหากไม่พบคอนโทรลเลอร์ที่ร้องขอ มันจะลบล้างหน้าข้อผิดพลาดเริ่มต้น 404 จะไม่ส่งผลต่อไฟล์show_404() ซึ่งจะโหลดค่าเริ่มต้นต่อไป error_404.php ไฟล์ใน application/views/errors/error_404.php. |
3 | $route['translate_uri_dashes'] เห็นได้ชัดจากค่าบูลีนนี่ไม่ใช่เส้นทางอย่างแน่นอน ตัวเลือกนี้ช่วยให้คุณสามารถแทนที่เครื่องหมายขีดกลาง ('-') โดยอัตโนมัติด้วยขีดล่างในส่วนควบคุมและวิธีการ URI ซึ่งช่วยให้คุณประหยัดรายการเส้นทางเพิ่มเติมหากคุณต้องการทำเช่นนั้น สิ่งนี้จำเป็นเนื่องจากเส้นประไม่ใช่อักขระชื่อคลาสหรือเมธอดที่ถูกต้องและจะทำให้เกิดข้อผิดพลาดร้ายแรงหากคุณพยายามใช้ |
สามารถปรับแต่งเส้นทางได้โดย wildcards หรือโดยใช้ regular expressions แต่โปรดทราบว่ากฎที่กำหนดเองสำหรับการกำหนดเส้นทางเหล่านี้ต้องมาตามกฎที่สงวนไว้
สัญลักษณ์แทน
เราสามารถใช้อักขระตัวแทนสองตัวได้ตามที่อธิบายด้านล่าง -
(:num) - จะจับคู่ส่วนที่มีตัวเลขเท่านั้น
(:any) - จะจับคู่ส่วนที่มีอักขระใด ๆ
Example
$route['product/:num']='catalog/product_lookup';
ในตัวอย่างข้างต้นหากพบคำตามตัวอักษร "product" ในส่วนแรกของ URL และพบตัวเลขในส่วนที่ 2 จะใช้คลาส "catalog" และ "product_lookup" แทน
นิพจน์ทั่วไป
เช่นเดียวกับสัญลักษณ์แทนเราสามารถใช้นิพจน์ทั่วไปใน $route array keyส่วน. หาก URI ใด ๆ ตรงกับนิพจน์ทั่วไปก็จะถูกกำหนดเส้นทางไปยังส่วนค่าที่กำหนดไว้ใน $ route array
Example
$route['products/([a-z]+)/(\d+)']='$1/id_$2';
ในตัวอย่างข้างต้น URI ที่คล้ายกับผลิตภัณฑ์ / รองเท้า / 123 จะเรียก "shoes"คลาสคอนโทรลเลอร์และ"id_123" วิธี.