CodeTändningsvägar: URL Routning med exempel

⚡ Smart sammanfattning

Codeigniter URL Ruttkartor a URL till en kontroller och metod, med en valfri parameter. Rutter definieras i routes.php, så en ren URL Precis som contacts/edit/1 körs redigeringsmetoden i Contacts-kontrollanten, som laddar sidhuvud-, innehålls- och sidfotsvyer.

  • 🧭 Kärnregel: En rutt matchar en URL till en kontroller, metod och valfri parameter.
  • 📐 Formel: Mönstret är Controller/Method/Parameter, definierat i application/config/routes.php.
  • ???? Standardrutt: default_controller anger startsidan när ingen URL segmentet är givet.
  • 🔢 Parametrar: En rutt som edit/:id skickar id-värdet till controller-metoden.
  • 🎛️ Kontroller: Varje rutt mappas till en metod som laddar matchande vyer.
  • 🖼️ Delade vyer: Sidhuvud- och sidfotsvyer återanvänds, med en specifik mittvy per åtgärd.
  • 404 Hantering: En oöverträffad URL genererar ett undantag för att sidan inte hittades, vilket kan åsidosättas med 404_override.

CodeTändningsrutter

Vad är CodeTändningsvägar?

Rutterna ansvarar för att svara på URL förfrågningar. Routningen matchar URL till de fördefinierade rutterna. Om ingen ruttmatchning hittas, CodeIgniter utlöser ett undantag för att sidan inte hittades.

Rutter i CodeTändämnen definieras med hjälp av formeln nedan:

example.com/Controller/Method/Parameter/

Här:

  • Styrenheten är mappad till det styrenhetsnamn som ska svara på URL.
  • Metoden mappas till den metod i kontrollenheten som ska svara på URI-begäran.
  • Parameter – detta avsnitt är valfritt.

CodeExempel på tändningsrutter

Låt oss nu titta på ett praktiskt URL routing in Codeigniter exempel. Tänk på följande URL: http://localhost:3000/contacts/edit/1

Här:

  • Namnet på den kontrollant som svarar på ovanstående URL är "kontakter".
  • Metoden i controllerklassen Contacts är ”edit”.
  • Metoden redigering accepterar en parameter. I vårt exempel skickas värdet "1" till metoden.

Här är en kort bakgrund av vad vi planerar att göra:

  • Rutthantering – routing svarar på URL förfrågningar. CodeTändningsdragningen matchar URL till de fördefinierade rutterna. Om ingen ruttmatchning hittas, CodeIgniter utlöser ett undantag för att sidan inte hittades.
  • controllers – rutter är länkade till controllers. Controllers sammanfogar modellerna och vyerna. De begär data och affärslogik från modellen och returnerar resultaten via vyns presentation. När en URL har matchats mot en rutt, vidarebefordras den till en offentlig funktion i en kontrollant som interagerar med datakällan och affärslogiken och returnerar vyn.
  • Visningar – synpunkter ansvarar för presentationen. En vy är vanligtvis en kombination av HTML, CSS och JavaScriptDenna del ansvarar för att visa webbsidan för användaren. Vanligtvis hämtas de visade uppgifterna från databasen eller en annan datakälla.

För att lära oss hur man implementerar rutter i ett verkligt projekt antar vi att vi skapar en applikation för att hantera kontaktuppgifter. Följande tabell visar URLs vi kommer att arbeta med.

S / N URL Rutt Regulator Metod
1 / $route['default_controller'] Välkommen index
2 /kontakter $route['kontakter'] Kontakt index
3 /kontakter/skapa $route['skapa'] Kontakt skapa
4 /contacts/edit/id $route['edit/:id'] Kontakt redigera
5 /contacts/update/id $route['update/:id'] Kontakt uppdatering
6 /contacts/delete/id $route['delete/:id'] Kontakt radera

Vi kommer att skapa rutter för vår applikation baserat på tabellen ovan. Vi har definierat URLs, den CodeIgniter-rutten och mappade dem till respektive kontroll- och metodnamn.

Skapa URL Routning för applikationen

Låt oss skapa Codeigniter URL routing för vårt handledningsprojekt. Öppna application/config/routes.php och modifiera rutterna så att de matchar följande:

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

Här:

  • $route['default_controller'] = 'välkommen'; definierar standardkontrollern Välkommen.
  • $route['contacts'] = 'contacts'; definierar en kontaktrutt som anropar indexmetoden i Contacts-kontrollanten.
  • $route['create'] = 'contacts/create'; definierar en rutt create som pekar till Contacts-kontrollanten och anropar create-metoden.
  • $route['edit/:id'] = 'contacts/edit'; definierar en ruttredigering som accepterar parametern id och pekar på redigeringsmetoden i Contacts-kontrollanten.
  • $route['update/:id'] = 'contacts/update'; definierar en ruttuppdatering som accepterar parametern id och pekar på uppdateringsmetoden i Contacts-klassen.
  • $route['delete/:id'] = 'kontakter/delete'; definierar en ruttdelete som accepterar parametern id och pekar på delete-metoden i Kontakter-kontrollanten.

Följande tabell visar respektive URLhärledda från de ovan definierade rutterna:

S / N Rutt Motsvarande URL
1 $route['default_controller'] = 'välkommen'; http://localhost:3000
2 $route['contacts'] = 'kontakter'; http://localhost:3000/contacts
3 $route['create'] = 'kontakter/skapa'; http://localhost:3000/contacts/create
4 $route['edit/:id'] = 'kontakter/redigera'; http://localhost:3000/contacts/edit/1
5 $route['update/:id'] = 'kontakter/uppdatering'; http://localhost:3000/contacts/update/1
6 $route['delete/:id'] = 'kontakter/radera'; http://localhost:3000/contacts/delete/1

Nu när vi har gått igenom rutterna, låt oss skapa Contacts-kontrollanten som svarar på de åtgärder som anges i rutterna. Skapa en ny fil Contacts.php i application/controllers/Contacts.php och lägg till följande kod:

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

Här:

  • class Contacts extends CI_Controller {…} definierar vår controllerklass och utökar CI_Controller-klassen som följer med CodeTändare.
  • Metoderna som definierats ovan motsvarar de rutter vi definierade, och de med parametrar som delete accepterar parametern $id.
  • Observera att funktionerna laddar tre vyer. Sidhuvudet och sidfoten är gemensamma för alla metoder. Den mellersta vyn är specifik för åtgärden, dvs. delete för delete-funktionen och create för create-funktionen. En annan viktig sak att komma ihåg är att vyerna laddas från underkatalogen kontakter.

CodeIgniter Views

Vi behöver fortfarande ett steg till innan vi kan testa vårt CodeTänd rutter med parametrar i webbläsaren. Låt oss skapa vyerna som motsvarar kontrollmetoderna ovan. Följande bild visar hur applikationen kommer att se ut:

CodeFörhandsvisning av Igniter-kontakter-applikationen

Skapa följande 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

Skapa en ny kontaktkatalog i application/views (application/views/contacts) och skapa följande filer i den:

index.php
create.php
edit.php

Din filstruktur bör vara följande:

CodeIgniter views filstruktur

Låt oss nu uppdatera 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>

Här:

  • HTML-koden ovan laddar Bulma CSS från ett CDN.

Följande är koden för footer.php-filen:

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

Låt oss nu lägga till koden för filerna index.php, edit.php och create.php för 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 spara alla ändringar som har gjorts. Öppna följande URL i din webbläsare: http://localhost:3000/contacts/Du kan klicka på länkarna Ny kontakt och Redigera kontakt och se vad som händer.

Vanliga frågor

Definiera rutten med en platshållare som edit/:id, och acceptera det matchande argumentet i controllermetoden, till exempel edit($id). CodeTändaren passerar URL segmentera in i det argumentet.

CodeIgniter genererar ett undantag för att sidan inte hittades och visar 404-sidan. Du kan peka 404_override mot din egen kontroller för att visa en anpassad felsida istället.

site_url() bygger en fullständig URL från din base_url och rutten, så att länkarna fortsätter att fungera om webbplatsen flyttas eller bassökvägen ändras. Den behöver URL hjälpen som ska laddas först.

Ja. Från ett resursnamn som kontakter kan AI skapa indexet, skapa, redigera, uppdatera och ta bort rutter med matchande kontrollmetoder, enligt REST-konventioner. Bekräfta parameternamnen.

Att läsa in sidhuvud och sidfot separat undviker att upprepa samma layout i varje sidvy. Varje metod laddar den delade sidhuvudet, en specifik innehållsvy och sedan den delade sidfoten.

Sammanfatta detta inlägg med: