CodeTændingsruter: URL Routing med eksempel

⚡ Smart opsummering

Codetændsats URL Rutekort a URL til en controller og metode, med en valgfri parameter. Ruter er defineret i routes.php, så en ren URL ligesom contacts/edit/1 kører edit-metoden i Contacts-controlleren, som indlæser header-, indholds- og footer-visninger.

  • 🧭 Kerneregel: En rute matcher en URL til en controller, metode og valgfri parameter.
  • 📐 Formel: Mønsteret er Controller/Method/Parameter, defineret i application/config/routes.php.
  • 🏠 Standardrute: default_controller angiver startsiden, når der ikke er nogen URL segmentet er givet.
  • 🔢 Parametre: En rute som edit/:id sender id-værdien til controller-metoden.
  • 🎛️ controller: Hver rute er knyttet til en metode, der indlæser de matchende visninger.
  • Delte visninger: Sidehoved- og sidefodsvisninger genbruges, med en specifik midtervisning pr. handling.
  • 404 Håndtering: En uovertruffen URL genererer en "page-not-found"-undtagelse, som kan tilsidesættes med 404_override.

CodeIgniter-ruter

Hvad er CodeTændingsruter?

Ruterne er ansvarlige for at reagere på URL anmodninger. Routing matcher URL til de foruddefinerede ruter. Hvis der ikke findes et rutematch, CodeIgniter udløser en undtagelse af, at siden ikke findes.

Ruter i CodeTændingselementer defineres ved hjælp af formlen nedenfor:

example.com/Controller/Method/Parameter/

Her:

  • Controlleren er knyttet til det controllernavn, der skal svare på URL.
  • Metoden er knyttet til den metode i controlleren, der skal svare på URI-anmodningen.
  • Parameter – dette afsnit er valgfrit.

CodeEksempel på tændingsruter

Lad os nu se på et praktisk URL routing i Codetændsats eksempel. Overvej følgende URL: http://localhost:3000/contacts/edit/1

Her:

  • Navnet på den controller, der svarer på ovenstående URL er "kontakter".
  • Metoden i controllerklassen Kontakter er “rediger”.
  • Rediger-metoden accepterer en parameter. I vores eksempel sendes værdien "1" til metoden.

Her er en kort baggrund for, hvad vi planlægger at gøre:

  • Routing – routing reagerer på URL anmodninger. CodeTændingsruten matcher URL til de foruddefinerede ruter. Hvis der ikke findes et rutematch, CodeIgniter udløser en undtagelse af, at siden ikke findes.
  • Controllere – ruter er knyttet til controllere. Controllere binder modellerne og views sammen. De anmoder om data og forretningslogik fra modellen og returnerer resultaterne via viewets præsentation. Når en URL er blevet matchet med en rute, videresendes den til en offentlig funktion i controlleren, der interagerer med datakilden og forretningslogikken og returnerer visningen.
  • Views – synspunkter er ansvarlige for præsentation. En visning er normalt en kombination af HTML, CSS og JavaScriptDenne del er ansvarlig for at vise websiden til brugeren. Typisk hentes de viste data fra databasen eller en anden datakilde.

For at lære at implementere ruter i et virkeligt projekt, antager vi, at vi opretter en applikation til administration af kontaktoplysninger. Følgende tabel viser URLs vi vil arbejde med.

S / N URL R controller Metode
1 / $route['default_controller'] Velkommen! indeks
2 / kontakter $route['kontakter'] Kontakt os indeks
3 /kontakter/opret $route['create'] Kontakt os skabe
4 /contacts/edit/id $route['edit/:id'] Kontakt os redigere
5 /contacts/update/id $route['update/:id'] Kontakt os opdatering
6 /contacts/delete/id $route['delete/:id'] Kontakt os slette

Vi opretter ruterne for vores applikation baseret på ovenstående tabel. Vi har defineret URLs, den CodeIgniter-ruten og kortlagde dem til de respektive controller- og metodenavne.

Oprettelse af URL Routing for applikationen

Lad os skabe Codetændsats URL routing til vores vejledningsprojekt. Åbn application/config/routes.php og rediger ruterne, så de matcher følgende:

$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;

Her:

  • $route['default_controller'] = 'velkommen'; definerer standardcontrolleren Velkommen.
  • $route['contacts'] = 'contacts'; definerer en kontaktrute, der kalder index-metoden i Contacts-controlleren.
  • $route['create'] = 'contacts/create'; definerer en rute create, der peger på Contacts-controlleren og kalder create-metoden.
  • $route['edit/:id'] = 'contacts/edit'; definerer en ruteredigering, der accepterer parameteren id og peger på redigeringsmetoden i Contacts-controlleren.
  • $route['update/:id'] = 'kontakter/opdatering'; definerer en ruteopdatering, der accepterer parameteren id og peger på opdateringsmetoden i Kontakter-klassen.
  • $route['delete/:id'] = 'contacts/delete'; definerer en sletterute, der accepterer parameteren id og peger på slettemetoden i Contacts-controlleren.

Følgende tabel viser de respektive URLs afledt af de ovenfor definerede ruter:

S / N R Tilsvarende URL
1 $route['default_controller'] = 'velkommen'; http://localhost:3000
2 $route['contacts'] = 'kontakter'; http://localhost:3000/contacts
3 $route['create'] = 'kontakter/opret'; http://localhost:3000/contacts/create
4 $route['edit/:id'] = 'kontakter/rediger'; http://localhost:3000/contacts/edit/1
5 $route['update/:id'] = 'kontakter/opdatering'; http://localhost:3000/contacts/update/1
6 $route['delete/:id'] = 'kontakter/slet'; http://localhost:3000/contacts/delete/1

Nu hvor vi har dækket ruterne, lad os oprette Contacts-controlleren, der skal reagere på de handlinger, der er angivet i ruterne. Opret en ny fil, Contacts.php, i application/controllers/Contacts.php, og tilføj følgende kode:

<?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');
}
}

Her:

  • class Contacts extends CI_Controller {…} definerer vores controllerklasse og udvider CI_Controller-klassen, der følger med CodeTændingsapparat.
  • Metoderne defineret ovenfor svarer til de ruter, vi definerede, og dem med parametre som delete accepterer parameteren $id.
  • Bemærk at funktionerne indlæser tre visninger. Sidehovedet og sidefoden er fælles for alle metoder. Den midterste visning er specifik for handlingen, dvs. slet for slettefunktionen og opret for opretfunktionen. En anden vigtig ting at huske er, at visningerne indlæses fra undermappen kontakter.

CodeIgniter Views

Vi mangler stadig et trin mere, før vi kan teste vores CodeIgniter-ruter med parametre i webbrowseren. Lad os oprette de visninger, der svarer til controllermetoderne ovenfor. Følgende billede viser, hvordan applikationen vil se ud:

CodeForhåndsvisning af Igniter-kontakter-applikationen

Opret følgende filer i application/views:

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

Opret en ny mappe med kontakter i application/views (application/views/contacts) og opret følgende filer i den:

index.php
create.php
edit.php

Din filstruktur skal være som følger:

CodeIgniter views filstruktur

Lad os nu opdatere header.php-filen:

<!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>

Her:

  • HTML-koden ovenfor indlæser Bulma CSS fra et CDN.

Følgende er koden til footer.php-filen:

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

Lad os nu tilføje koden til index.php-, edit.php- og create.php-filerne for kontakter:

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>

Du kan gemme alle de ændringer, der er foretaget. Åbn følgende URL i din webbrowser: http://localhost:3000/contacts/Du kan klikke på linkene Ny kontakt og Rediger kontakt og se, hvad der sker.

Ofte Stillede Spørgsmål

Definer ruten med en pladsholder, f.eks. edit/:id, og accepter det matchende argument i controllermetoden, for eksempel edit($id). CodeTænderen passerer URL segmenter i det argument.

CodeIgniter udløser en "page-not-found"-undtagelse og viser 404-siden. Du kan pege 404_override på din egen controller for at vise en brugerdefineret fejlside i stedet.

site_url() bygger en fuld URL fra din base_url og ruten, så links fortsætter med at virke, hvis webstedet flytter sig, eller basisstien ændres. Den har brug for URL hjælperen skal indlæses først.

Ja. Fra et ressourcenavn som f.eks. kontakter kan AI producere indekset, oprette, redigere, opdatere og slette ruter med matchende controllermetoder i henhold til REST-konventioner. Bekræft parameternavnene.

Separat indlæsning af header og footer undgår at gentage det samme layout i hver sidevisning. Hver metode indlæser den delte header, en specifik indholdsvisning og derefter den delte footer.

Opsummer dette indlæg med: