Jak nastavit relaci v Codeigniter s příkladem
Správa relací CodeIgniter
Pokud jste předtím vyvíjeli desktopové aplikace, pravděpodobně víte, že můžete definovat globální proměnnou, přiřadit jí hodnotu a používat ji po celou dobu životního cyklu aplikace při otevírání a zavírání více než jedné (1) a každý požadavek bude mít přístup k globální proměnná.
Jinými slovy, stav aplikace je zachován. To znamená, že pokud při přihlášení nastavíte název společnosti na globální proměnnou, pak i po zavření přihlašovacího formuláře zůstane stav názvu společnosti zachován.
HTTP funguje trochu jinak než výše uvedený scénář, který jsme právě popsali. Je bez státní příslušnosti. To znamená, že cokoliv uděláte v jedné žádosti, nevytrvá v další žádosti. T
o obejít tento problém. Máme dvě (2) řešení v PHP. Můžeme pracovat buď s cookies, což jsou malé soubory umístěné na počítači uživatele, nebo pracovat s relacemi, které jsou podobné cookies, ale místo toho jsou uloženy na serveru a mají větší kapacitu než cookies.
Kdy použít relace?
Relace jsou obvykle užitečné, když chcete znát aktivity uživatele ze stránky na stránku. Řekněme například, že máte na webu chráněnou oblast. Uživatelé se nemusí přihlašovat na každé stránce. Můžete nechat uživatele přihlásit se jednou a uložit jeho podrobnosti do proměnné relace a poté znovu použít stejná data na další požadavky. Další případy použití zahrnují práci na nákupním systému a uživatel musí přidávat položky do nákupního košíku.
Alternativně CodeIgniter také používá relace ke zpřístupnění dat pouze jednou při příštím požadavku. To je užitečné, pokud můžete upravit a aktualizovat záznam databáze a chcete uživateli vrátit nějakou zpětnou vazbu, když je přesměrován na jinou stránku.
Odesílání zpráv Flash na jiné stránky pomocí CI Sessions
V této části se dozvíte o odesílání flash zpráv na jiné stránky pomocí knihovny relací v CodeIgniter
Vytvořte nový soubor SessionController v
application/controllers/SessionController.php
Přidejte následující kód
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class SessionController extends CI_Controller { public function __construct() { parent:: __construct(); $this->load->helper('url'); $this->load->library('session'); } public function index() { $this->load->view('sessions/index'); } public function flash_message(){ $this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages'); redirect(base_url('flash_index')); } }
TADY,
- třída SessionController rozšiřuje CI_Controller {…} definuje třídu SessionController a rozšiřuje nadřazenou třídu kontroleru.
- veřejná funkce __construct() {…} definuje metodu konstruktoru, která inicializuje nadřazenou třídu a načte pomocnou adresu URL a knihovnu relace.
- public function index() {…} definuje metodu indexu relace, která načte zobrazení indexu relace.
- veřejná funkce flash_message(){…} definuje metodu flash zprávy, která nastaví flash data a poté přesměruje na cestu flash_index
Pojďme nyní vytvořit pohled, který bude zobrazovat hodnotu dat relace.
Vytvořte novou relaci adresáře v aplikaci/pohledech
Vytvořte nový soubor index.php v application/views/sessions
Přidejte následující kód
<html> <head> <title>Code Igniter Flash Session</title> </head> <body> <p>The session value of msg is <b> <?=$this->session->userdata('msg');?> </b></p> </body> </html>
TADY,
session->userdata('msg');?> načte hodnotu dat relace pomocí klíče msg a zobrazí ji v prohlížeči.
Pojďme nyní vytvořit trasy pro naši metodu session flash
Otevřete application/config/routes.php
Přidejte následující řádky
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
Nyní spustíme vestavěný server pro PHP a otestujte naše bleskové zprávy
Otevřete terminál
Spusťte následující příkaz
cd C:\Sites\ci-app php -S localhost:3000
TADY,
Výše uvedený příkaz projde adresář s kódem aplikace a spustí vestavěný server na portu 3000.
Poznámka: Cesta aplikace se musí shodovat s cestou, ze které jste stáhli CodeIgniter, a můžete použít libovolné číslo portu, které je na vašem počítači volné. Není nutné používat port 3000.
Načtěte do webového prohlížeče následující URL: http://localhost:3000/flash_message
Budete přesměrováni na následující adresu URL a získáte následující výsledky: http://localhost:3000/flash_index
Klikněte na tlačítko pro obnovení ve webovém prohlížeči nebo stiskněte klávesu F5
Nyní získáte následující výsledky
Ukládání uživatelských dat v CI Sessions
Podívejme se nyní na trochu pokročilejší příklad. Pro zjednodušení budeme simulovat autentizaci uživatele a nebudeme dělat samotnou implementaci ověření uživatelského záznamu v databázi a zadaného hesla.
Začněme s trasami
Otevřete routes.php umístěný v application/config
Přidejte následující trasy
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
TADY,
- $route['login'] = 'controller/login'; definuje cestu, která zobrazí přihlašovací formulář
- $route['authenticate'] = 'kontrolér relace/autentizace'; definuje cestu, která simuluje úspěšné přihlášení uživatele a nastavuje přihlašovací údaje relace.
- $route['settings'] = 'regulátor relace/nastavení'; definuje chráněnou stránku, která by měla být přístupná pouze přihlášeným uživatelům
- $route['dashboard'] = 'controller/dashboard'; definuje chráněnou stránku, která by měla být přístupná pouze přihlášeným uživatelům.
- $route['logout'] = 'kontrolér relace/odhlášení'; odhlásí uživatele zničením dat relace
Pojďme nyní aktualizovat SessionController
Otevřete application/controllers/SessionController.php
Přidejte následující metody
public function check_auth($page) { if (!$this->session->userdata('logged_in')) { $this->session->set_flashdata('msg', "You need to be logged in to access the $page page."); redirect('login'); } } public function login() { $this->load->view('sessions/login'); } public function authenticate() { $this->session->set_userdata('username', 'John Doe'); $this->session->set_userdata('logged_in', TRUE); redirect(base_url('dashboard')); } public function dashboard() { $this->check_auth('dashboard'); $this->load->view('sessions/dashboard'); } public function settings() { $this->check_auth('settings'); $this->load->view('sessions/settings'); } public function logout() { $this->session->unset_userdata('username'); $this->session->unset_userdata('logged_in'); redirect(base_url('login')); }
TADY,
- veřejná funkce check_auth($page) {…} definuje metodu, která zkontroluje, zda je uživatel přihlášen, a poté povolí přístup na stránku. Pokud uživatel není přihlášen, je přesměrován na přihlašovací stránku pomocí flashové zprávy.
- public function login() {…} načte přihlašovací pohled umístěný v adresáři sessions.
- public function authenticate() {…} nastavuje uživatelská data relace pro klíče login_in a username. POZNÁMKA: Neověřujeme žádné přihlašovací údaje vůči databázi. Jednoduše předpokládáme, že odeslané údaje jsou v pořádku a nastavíme data relace.
- public function dashboard() {…} načte stránku dashboardu po volání $this->check_auth('dashboard'); který ověří, že je nastaven klíč relace přihlášený_in.
- public function settings() {…} načte stránku nastavení, která je také chráněna
- public function logout() {…} zničí data relace a odhlásí uživatele. Metoda také přesměruje na přihlašovací stránku
Zobrazení relace CodeIgniter
Vytvořte následující pohledy v aplikaci/pohledech/relacích
- dashboard.php
- login.php
- Settings.php
Přidejte následující kód do souboru dashboard.php
<!DOCTYPE html> <html> <head> <title>Dashboard</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"><?=$this->session->userdata('username');?></a> <div class="navbar-dropdown"> <a class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Welcome Page</h3> </div> </div> </body> </html>
TADY,
session->userdata('username');?> zobrazí uživatelské jméno, které jsme nastavili v autentizační metodě
Přidejte následující kód do login.php
<!DOCTYPE html> <html> <head> <title>Login</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata('msg');?></p> <form method="post" action="<?= site_url('authenticate')?>"> <div class="field"> <label class="label">Username</label> <div class="control"> <input class="input" type="text" placeholder="Text input"> </div> </div> <div class="field"> <label class="label">Password</label> <div class="control"> <input class="input" type="passport" placeholder="Text input"> </div> </div> <div class="field is-grouped"> <div class="control"> <button class="button is-success">Login</button> </div> </div> </form> </div> </div> </body> </html>
TADY,
Přihlašovací formulář se odešle k ověření trasy.
Přidejte následující kód do settings.php
<!DOCTYPE html> <html> <head> <title>Settings</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link">Jim Jones</a> <div class="navbar-dropdown"> <a href="#" class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Settings Page</h3> </div> </div> </body> </html>
To je pro naše názory vše. Pojďme nyní otestovat naši aplikaci.
V tomto tutoriálu používáme vestavěný webový server PHP, ale můžete použít jakýkoli webový server, který podporuje PHP.
Otevřete terminál
Spusťte následující příkaz
cd C:\Sites\ci-app php -S localhost:3000
TADY,
Výše uvedený příkaz projde adresář s kódem aplikace a spustí vestavěný server na portu 3000.
Poznámka: Cesta aplikace se musí shodovat s cestou, ze které jste stáhli CodeIgniter, a můžete použít libovolné číslo portu, které je na vašem počítači volné. Není nutné používat port 3000.
Otevřete ve svém webovém prohlížeči následující adresu URL: http://localhost:3000/dashboard
budete přesměrováni na následující stránku
Klikněte na tlačítko Přihlásit
Uvidíte následující výsledky
Po přihlášení jsme nyní schopni vidět data relace.
Shrnutí
V tomto tutoriálu jste se naučili základy knihovny relací CodeIgniter a naučili jste se, jak ji používat k ukládání dočasných dat jako flash zprávy a jak používat ukládání trvalejších dat, tj. přihlašovacích údajů uživatele.