Codeเส้นทางจุดประกาย: URL การกำหนดเส้นทางพร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

Codeเครื่องทำให้ลุกไหม้ URL แผนที่เส้นทาง URL ไปยังคอนโทรลเลอร์และเมธอด โดยมีพารามิเตอร์เสริม เส้นทางต่างๆ ถูกกำหนดไว้ใน routes.php ดังนั้นจึงดูเรียบร้อย URL เช่น contacts/edit/1 จะเรียกใช้เมธอด edit ของคอนโทรลเลอร์ Contacts ซึ่งจะโหลดมุมมองส่วนหัว เนื้อหา และส่วนท้าย

  • 🧭 กฎหลัก: เส้นทางตรงกับ URL ไปยังตัวควบคุม เมธอด และพารามิเตอร์เสริม
  • 📐 สูตร: รูปแบบคือ Controller/Method/Parameter ซึ่งกำหนดไว้ใน application/config/routes.php
  • 🏠 เส้นทางเริ่มต้น: default_controller จะตั้งค่าหน้าแรกเมื่อไม่มี URL มีการกำหนดส่วนย่อยไว้แล้ว
  • 🔢 พารามิเตอร์: เส้นทางเช่น edit/:id จะส่งค่า id ไปยังเมธอดของคอนโทรลเลอร์
  • 🎛️ ควบคุม: แต่ละเส้นทางจะเชื่อมโยงกับวิธีการโหลดมุมมองที่ตรงกัน
  • 🖼️ มุมมองที่ตรงกัน: ส่วนหัวและส่วนท้ายของภาพจะถูกนำมาใช้ซ้ำ โดยมีภาพตรงกลางที่เฉพาะเจาะจงสำหรับแต่ละการกระทำ
  • 404 การจัดการ: ไม่มีใครเทียบได้ URL ทำให้เกิดข้อผิดพลาด "ไม่พบหน้าเว็บ" ซึ่งสามารถแก้ไขได้ด้วย 404_override

Codeเส้นทางจุดประกาย

สิ่งที่เป็น Codeเส้นทางจุดประกายไฟ?

เส้นทางต่างๆ มีหน้าที่รับผิดชอบในการตอบสนองต่อ URL คำขอ การกำหนดเส้นทางตรงกับ URL ไปยังเส้นทางที่กำหนดไว้ล่วงหน้า หากไม่พบเส้นทางที่ตรงกัน CodeIgniter แสดงข้อผิดพลาด "ไม่พบหน้าเว็บ"

เส้นทางใน Codeตัวจุดประกายไฟถูกกำหนดโดยใช้สูตรด้านล่างนี้:

example.com/Controller/Method/Parameter/

ที่นี่:

  • ตัวควบคุมจะถูกแมปกับชื่อตัวควบคุมที่ควรตอบสนองต่อ URL.
  • เมธอดนี้จะถูกแมปไปยังเมธอดในคอนโทรลเลอร์ที่ควรตอบสนองต่อคำขอ URI
  • พารามิเตอร์ – ส่วนนี้เป็นทางเลือก

Codeตัวอย่างเส้นทางการจุดประกาย

ต่อไปเรามาดูตัวอย่างที่เป็นรูปธรรมกัน URL การกำหนดเส้นทางใน Codeเครื่องทำให้ลุกไหม้ ตัวอย่างเช่น พิจารณาสิ่งต่อไปนี้ URL: http://localhost:3000/contacts/edit/1

ที่นี่:

  • ชื่อของตัวควบคุมที่ตอบสนองต่อข้อความข้างต้น URL คือ “รายชื่อผู้ติดต่อ”
  • เมธอดในคลาสคอนโทรลเลอร์ Contacts คือ “edit”
  • เมธอด edit รับพารามิเตอร์หนึ่งตัว ในตัวอย่างของเรา ค่า "1" ถูกส่งไปยังเมธอดนี้

ต่อไปนี้เป็นข้อมูลโดยย่อเกี่ยวกับสิ่งที่เราวางแผนจะทำ:

  • การกำหนดเส้นทาง – การกำหนดเส้นทางตอบสนองต่อ URL การร้องขอ Codeการกำหนดเส้นทางของ Igniter ตรงกับ URL ไปยังเส้นทางที่กำหนดไว้ล่วงหน้า หากไม่พบเส้นทางที่ตรงกัน CodeIgniter แสดงข้อผิดพลาด "ไม่พบหน้าเว็บ"
  • ตัวควบคุม – เส้นทางต่างๆ เชื่อมโยงกับตัวควบคุม ตัวควบคุมทำหน้าที่เชื่อมต่อโมเดลและวิวเข้าด้วยกัน โดยจะร้องขอข้อมูลและตรรกะทางธุรกิจจากโมเดล และส่งผลลัพธ์กลับมาผ่านการแสดงผลของวิว เมื่อ... URL เมื่อตรงกับเส้นทางแล้ว ระบบจะส่งต่อไปยังฟังก์ชันสาธารณะของคอนโทรลเลอร์ ซึ่งจะโต้ตอบกับแหล่งข้อมูลและตรรกะทางธุรกิจ และส่งคืนมุมมอง
  • เข้าชม – มุมมองมีหน้าที่นำเสนอ มุมมองมักจะเป็นการผสมผสานระหว่าง HTML, CSS และ Javaต้นฉบับส่วนนี้มีหน้าที่แสดงหน้าเว็บให้ผู้ใช้เห็น โดยทั่วไปแล้ว ข้อมูลที่แสดงจะถูกดึงมาจากฐานข้อมูลหรือแหล่งข้อมูลอื่น

เพื่อเรียนรู้วิธีการกำหนดเส้นทางในโครงการจริง เราจะสมมติว่าเรากำลังสร้างแอปพลิเคชันสำหรับจัดการรายละเอียดการติดต่อ ตารางต่อไปนี้แสดง... URLพวกเราจะทำงานร่วมกับพวกเขา

S / N URL เส้นทาง ตัวควบคุม วิธี
1 / $เส้นทาง['default_controller'] ยินดีต้อนรับ ดัชนี
2 /รายชื่อผู้ติดต่อ $เส้นทาง['ผู้ติดต่อ'] ช่องทางการติดต่อ ดัชนี
3 /ติดต่อ/สร้าง $เส้นทาง['สร้าง'] ช่องทางการติดต่อ สร้าง
4 /รายชื่อผู้ติดต่อ/แก้ไข/id $เส้นทาง['แก้ไข/:id'] ช่องทางการติดต่อ แก้ไข
5 /ผู้ติดต่อ/อัปเดต/id $เส้นทาง['อัพเดต/:id'] ช่องทางการติดต่อ ปรับปรุง
6 /รายชื่อผู้ติดต่อ/ลบ/รหัส $เส้นทาง['ลบ/:id'] ช่องทางการติดต่อ ลบ

เราจะสร้างเส้นทางของแอปพลิเคชันของเราโดยอิงจากตารางด้านบน เราได้กำหนดไว้แล้ว URLs, Codeกำหนดเส้นทาง Igniter และแมปเส้นทางเหล่านั้นไปยังชื่อคอนโทรลเลอร์และเมธอดที่เกี่ยวข้อง

การสร้าง URL การกำหนดเส้นทางสำหรับแอปพลิเคชัน

มาสร้างสรรค์กันเถอะ Codeเครื่องทำให้ลุกไหม้ URL การกำหนดเส้นทางสำหรับโปรเจ็กต์ตัวอย่างของเรา เปิดไฟล์ application/config/routes.php และแก้ไขเส้นทางให้ตรงกับตัวอย่างต่อไปนี้:

$route['default_controller'] = 'welcome';
$route['contacts'] = 'contacts';
$route['create'] = 'contacts/create';
$route['edit/:id'] = 'contacts/edit';
$route['update/:id'] = 'contacts/update';
$route['delete/:id'] = 'contacts/delete';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

ที่นี่:

  • $route['default_controller'] = 'ยินดีต้อนรับ'; กำหนดคอนโทรลเลอร์เริ่มต้นยินดีต้อนรับ
  • $route['contacts'] = 'contacts'; กำหนดเส้นทางรายชื่อผู้ติดต่อที่เรียกใช้เมธอด index ในคอนโทรลเลอร์รายชื่อผู้ติดต่อ
  • $route['create'] = 'contacts/create'; กำหนดเส้นทางสร้าง (create) ที่ชี้ไปยังคอนโทรลเลอร์ Contacts และเรียกใช้เมธอด create
  • $route['edit/:id'] = 'contacts/edit'; กำหนดเส้นทาง edit ที่รับพารามิเตอร์ id และชี้ไปยังเมธอด edit ของคอนโทรลเลอร์ Contacts
  • $route['update/:id'] = 'contacts/update'; กำหนดเส้นทางอัปเดตที่รับพารามิเตอร์ id และชี้ไปยังเมธอด update ของคลาส Contacts
  • $route['delete/:id'] = 'contacts/delete'; กำหนดเส้นทางลบข้อมูลที่รับพารามิเตอร์ id และชี้ไปยังเมธอด delete ของคอนโทรลเลอร์ Contacts

ตารางต่อไปนี้แสดงรายละเอียดที่เกี่ยวข้อง URLs ที่ได้มาจากเส้นทางที่กำหนดไว้ข้างต้น:

S / N เส้นทาง ตรงกัน URL
1 $route['default_controller'] = 'ยินดีต้อนรับ'; http://localhost:3000
2 $route['contacts'] = 'รายชื่อผู้ติดต่อ'; http://localhost:3000/contacts
3 $route['create'] = 'รายชื่อผู้ติดต่อ/สร้าง'; http://localhost:3000/contacts/create
4 $route['edit/:id'] = 'รายชื่อติดต่อ/แก้ไข'; http://localhost:3000/contacts/edit/1
5 $route['update/:id'] = 'รายชื่อผู้ติดต่อ/อัพเดต'; http://localhost:3000/contacts/update/1
6 $route['delete/:id'] = 'รายชื่อติดต่อ/ลบ'; http://localhost:3000/contacts/delete/1

เมื่อเราได้เรียนรู้เกี่ยวกับเส้นทางต่างๆ แล้ว ต่อไปเราจะสร้างคอนโทรลเลอร์ Contacts ที่จะตอบสนองต่อการกระทำที่ระบุไว้ในเส้นทางเหล่านั้น สร้างไฟล์ใหม่ชื่อ Contacts.php ใน application/controllers/Contacts.php และเพิ่มโค้ดต่อไปนี้:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Contacts extends CI_Controller {

public function __construct() {
parent::__construct();
$this->load->helper('url');
}

public function index() {
$this->load->view('header');
$this->load->view('contacts/index');
$this->load->view('footer');
}

public function create() {
$this->load->view('header');
$this->load->view('contacts/create');
$this->load->view('footer');
}

public function edit($id) {
$this->load->view('header');
$this->load->view('contacts/edit');
$this->load->view('footer');
}

public function update($id) {
$this->load->view('header');
$this->load->view('contacts/update');
$this->load->view('footer');
}

public function delete($id) {
$this->load->view('header');
$this->load->view('contacts/delete');
$this->load->view('footer');
}
}

ที่นี่:

  • คลาส Contacts extends CI_Controller {…} กำหนดคลาสคอนโทรลเลอร์ของเราและสืบทอดมาจากคลาส CI_Controller ที่มาพร้อมกับ Codeตัวจุดไฟ
  • เมธอดที่กำหนดไว้ข้างต้นสอดคล้องกับเส้นทางที่เรากำหนดไว้ และเมธอดที่มีพารามิเตอร์ เช่น delete จะรับพารามิเตอร์ $id
  • โปรดสังเกตว่าฟังก์ชันต่างๆ จะโหลดมุมมองสามแบบ ส่วนหัวและส่วนท้ายเป็นส่วนที่ใช้ร่วมกันสำหรับทุกเมธอด ส่วนมุมมองตรงกลางจะเป็นส่วนเฉพาะสำหรับแต่ละการกระทำ เช่น ลบสำหรับฟังก์ชันลบ และสร้างสำหรับฟังก์ชันสร้าง อีกสิ่งสำคัญที่ควรจำไว้คือ มุมมองเหล่านี้จะถูกโหลดจากไดเร็กทอรีย่อยของรายชื่อติดต่อ

Codeมุมมองผู้จุดประกาย

เรายังต้องดำเนินการอีกขั้นตอนหนึ่งก่อนที่จะสามารถทดสอบได้ Codeการกำหนดเส้นทาง Igniter พร้อมพารามิเตอร์ในเว็บเบราว์เซอร์ มาสร้างวิวที่สอดคล้องกับเมธอดคอนโทรลเลอร์ข้างต้นกัน ภาพต่อไปนี้แสดงให้เห็นว่าแอปพลิเคชันจะมีลักษณะอย่างไร:

Codeตัวอย่างแอปพลิเคชัน Igniter Contacts

สร้างไฟล์ต่อไปนี้ในโฟลเดอร์ application/views:

header.php – this file will contain the contacts app menu and the header
footer.php – this file will contain the application footer

สร้างไดเร็กทอรีใหม่ชื่อ contacts ภายใน application/views (application/views/contacts) และสร้างไฟล์ต่อไปนี้ไว้ภายในไดเร็กทอรีนั้น:

index.php
create.php
edit.php

โครงสร้างไฟล์ของคุณควรเป็นดังนี้:

CodeIgniter แสดงโครงสร้างไฟล์

ตอนนี้เรามาอัปเดตไฟล์ header.php กันเถอะ:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>CodeIgniter Routes</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
<script defer src="https://use.fontawesome.com/releases/v5.3.1/js/all.js"></script>
</head>
<body>
<section class="section">
<div class="container">
<h1 class="title">CI Contacts v1</h1>
<h2 class="subtitle">CodeIgniter contacts management app</h2>
<div class="columns">
<div class="column is-one-quarter">
<aside class="menu">
<p class="menu-label">
General
</p>
<ul class="menu-list">
<li><a class="is-active" href="#">Dashboard</a></li>
<li><a href="<?=site_url('contacts/create')?>">New Contact</a></li>
<li><a href="<?=site_url('contacts/edit/1')?>">Edit Contacts</a></li>
</ul>
<p class="menu-label">
Settings
</p>
<ul class="menu-list">
<li><a href="#">SMS</a></li>
<li><a href="#">Email</a></li>
</ul>
</aside>
</div>

ที่นี่:

  • โค้ด HTML ด้านบนจะโหลด Bulma CSS จาก CDN

ต่อไปนี้คือโค้ดสำหรับไฟล์ footer.php:

</div>
</div>
</section>
</body>
</html>

ต่อไปนี้เราจะเพิ่มโค้ดสำหรับไฟล์ index.php, edit.php และ create.php สำหรับรายชื่อผู้ติดต่อ:

index.php
<div class="column">Index content goes here...</div>
edit.php
<div class="column">Edit content goes here...</div>
create.php
<div class="column">Create content goes here...</div>

คุณสามารถบันทึกการเปลี่ยนแปลงทั้งหมดที่ทำไว้ได้ เปิดไฟล์ต่อไปนี้ URL ในเว็บเบราว์เซอร์ของคุณ: http://localhost:3000/contacts/คุณสามารถคลิกที่ลิงก์ "เพิ่มผู้ติดต่อใหม่" และ "แก้ไขผู้ติดต่อ" เพื่อดูว่าจะเกิดอะไรขึ้น

คำถามที่พบบ่อย

กำหนดเส้นทางด้วยตัวยึดตำแหน่ง เช่น edit/:id และรับอาร์กิวเมนต์ที่ตรงกันในเมธอดคอนโทรลเลอร์ ตัวอย่างเช่น edit($id) Codeเครื่องจุดไฟผ่านไป URL แบ่งส่วนเข้าไปในข้อโต้แย้งนั้น

CodeIgniter จะแสดงข้อผิดพลาด "ไม่พบหน้าเว็บ" และหน้า 404 คุณสามารถกำหนดค่า 404_override ให้ชี้ไปยังคอนโทรลเลอร์ของคุณเองเพื่อแสดงหน้าข้อผิดพลาดแบบกำหนดเองแทนได้

site_url() สร้าง URL ที่สมบูรณ์ URL จาก base_url และเส้นทางของคุณ เพื่อให้ลิงก์ยังคงใช้งานได้แม้ว่าเว็บไซต์จะย้ายที่อยู่หรือเส้นทางพื้นฐานจะเปลี่ยนแปลงไป จำเป็นต้องมีสิ่งนี้ URL ตัวช่วยจะต้องถูกโหลดก่อน

ใช่แล้ว จากชื่อทรัพยากรอย่างเช่นรายชื่อติดต่อ AI สามารถสร้างดัชนี สร้าง แก้ไข อัปเดต และลบเส้นทางต่างๆ พร้อมด้วยเมธอดคอนโทรลเลอร์ที่ตรงกัน โดยปฏิบัติตามหลักการของ REST โปรดยืนยันชื่อพารามิเตอร์ด้วย

การโหลดส่วนหัวและส่วนท้ายแยกกันจะช่วยหลีกเลี่ยงการแสดงเค้าโครงเดียวกันซ้ำในทุกการแสดงผลหน้าเว็บ แต่ละวิธีจะโหลดส่วนหัวที่ใช้ร่วมกัน เนื้อหาส่วนเฉพาะ และส่วนท้ายที่ใช้ร่วมกันในที่สุด

สรุปโพสต์นี้ด้วย: