Výukový program PHP MVC Framework

⚡ Chytré shrnutí

Návrh PHP MVC Frameworku odděluje aplikační data a obchodní logiku od prezentace pomocí modelů, pohledů a kontrolerů. CodeIgniter tento vzor činí praktickým a umožňuje vývojářům PHP rychleji vytvářet bezpečné a udržovatelné webové aplikace.

  • 🧩 Vzor: MVC rozděluje aplikaci na Model (data), View (prezentace) a Controller (zpracování požadavků) pro čistší kód.
  • ???? Produktivita: Frameworky dodávají předpřipravené knihovny pro přístup k databázi, validaci a sanitizaci vstupů, takže týmy dodávají funkce rychleji.
  • 🛠️ Možnosti: CodeIgniter, CakePHP a Laminas (dříve Zend) zůstávají aktivní volbou, zatímco Kohana byla v roce 2017 ukončena.
  • 🗄️ Model: In CodeModely Igniter rozšiřují CI_Model a používají metody Query Builderu pro bezpečné operace s databází.
  • 🎮 Ovladač: Kontrolery rozšiřují CI_Controller, čtou uživatelský vstup prostřednictvím vstupní třídy a načítají správný pohled.
  • 📈 Dopad: Portování jednoduché PHP aplikace s hlasováním ukazuje, jak MVC struktura snižuje duplicitu a zjednodušuje dlouhodobou údržbu.

Framework PHP MVC

Co je PHP MVC framework?

PHP MVC je návrhový vzor aplikace, který odděluje data aplikace a obchodní logiku (model) od prezentace (zobrazení). MVC je zkratka pro Model, View & Controller.

Ovladač zprostředkovává mezi modely a pohledy.

Představte si designový vzor MVC jako auto a řidiče.

Auto má čelní skla (výhled), která řidič (řídicí jednotka) používá ke sledování provozu před sebou a poté zrychluje nebo brzdí (model) v závislosti na tom, co vidí před sebou.

Dále se podívejme, proč se vyplatí použít framework postavený na tomto vzoru.

Proč používat PHP MVC Framework?

Frameworky PHP MVC zjednodušují práci se složitými technologiemi tím, že:

  • Skrytí všech složitých implementačních detailů
  • Poskytování standardních metod, které můžeme použít k vývoji našich aplikací
  • Zvýšení produktivity vývojářů, protože základní implementace aktivit, jako je připojení k databázi a sanitizace uživatelského vstupu, jsou již částečně implementovány.
  • Podpora dodržování profesionálních kódovacích standardů

Návrhový vzor PHP MVC

Pojďme si nyní krátce probrat každou komponentu návrhového vzoru MVC.

Model – tato část se zabývá obchodní logikou a daty aplikace. Lze jej použít k ověřování dat, zpracování dat a jejich ukládání. Data mohou pocházet z;

  • plochý pilník
  • databáze
  • XML dokument
  • Jiné platné zdroje dat.

kontrolor – toto je část, která se zabývá požadavky uživatele na zdroje ze serveru.

Například když uživatel požádá o URL …/index.php?products=list, řídicí jednotka načte model produktů, aby načetla data o produktech, a poté zobrazí výsledky v seznamu.

Stručně řečeno, ovladač spojuje modely a pohledy dohromady v závislosti na požadovaných zdrojích.

Zobrazení – tato část se zabývá prezentací dat uživateli. Obvykle se jedná o HTML stránky.

Typy PHP MVC frameworku

Výběr nejlepšího PHP frameworku je výzva.

Nemusíte psát svůj vlastní rámec, abyste mohli těžit z výhod MVC.

Měli byste se pouze pokusit vytvořit vlastní návrh aplikace související s MVC, abyste pochopili, jak fungují rámce MVC.

Jakmile se seznámíte s tím, jak fungují rámce MVC, měli byste přejít na vyzrálé a již testované rámce.

Níže uvedená tabulka stručně popisuje některé populární PHP frameworky a funkce, které každý framework nabízí.

Rámec Description

CodeZapalovač


CodeZapalovač


https://codeigniter.com/

Je to jeden z nejpopulárnějších PHP MVC frameworků, nyní ve své čtvrté hlavní verzi (CodeIgniter 4). Je lehký a má krátkou křivku učení. Má bohatou sadu knihoven, které pomáhají rychle vytvářet webové stránky a aplikace. Mohou ho používat i uživatelé s omezenými znalostmi programování v objektově orientovaném programu (OOP). Aplikace vytvořené pomocí CodeZapalovač je součástí dodávky;


kohana


kohana


http://kohanaframework.org

Jedná se o bezpečný a lehký framework s hierarchickým kontrolérem zobrazení modelu (HMVC). Poznámka: Kohana byla oficiálně ukončena v roce 2017; její poslední stabilní verze byla 3.3.6 (červenec 2016). Komunitní fork Koseven pokračoval v její kódové základně. Mezi společnosti, které používaly Kohanu, patří:


CakePHP


CakePHP


www.cakephp.org

Je modelován podle Ruby on Rails a je stále aktivně udržován (verze 5.x). Je známý pro koncepty jako softwarové návrhové vzory, konvence nad konfigurací, ActiveRecord atd. CakePHP poháněné aplikace zahrnují;


Zend

https://getlaminas.org/


Zend (nyní Laminas)

Je to mocný rámec;

  • Bezpečné, spolehlivé, rychlé a škálovatelné
  • Podporuje tvorbu webových služeb a API.

Je ideální pro vývojping obchodní aplikace. V roce 2020 přešel Zend Framework na open source projekt Laminas. Mezi aplikace založené na Zend/Laminas patří:

  • Pimcore CMS,
  • DotKernel.

Mezi společnosti, které používaly framework Zend, patří:

  • BBC
  • Cisco
  • Webex
  • Offers.com

PHP MVC Framework vs. prosté PHP: Klíčové rozdíly

Co framework v praxi vlastně mění? Obyčejné PHP vám dává naprostou svobodu, ale každý projekt nakonec znamená od základu nově vynalézané routing, validace a přístup k databázi. Framework PHP MVC tyto opakující se úkoly standardizuje, takže váš kód zůstává konzistentní napříč projekty a týmy.

Vzhled Prosté PHP Framework PHP MVC
Code organizace Smíšené HTML, SQL a logika v jednom souboru Rozděleno na modely, pohledy a kontrolery
Přístup k databázi Ručně psané dotazy na každé stránce Vestavěný nástroj pro tvorbu dotazů nebo ORM s vazbou parametrů
Bezpečnost Vývojář musí pamatovat na všechna bezpečnostní opatření Včetně filtrování vstupu, ochrany XSS a CSRF
Údržba Změny se nepředvídatelně šíří soubory Každá vrstva se může měnit nezávisle

👍 Tip: Nejprve si vytvořte jeden malý prostý PHP projekt, jako je ten níže uvedený průzkum veřejného mínění; nepříjemnosti spojené se smíšeným kódem jasně ukazují hodnotu MVC separace.

Přenesení aplikace pro průzkum veřejného mínění na CodeZapalovač

V tomto konzultace, vytvořili jsme PHP aplikaci pro hlasování. Zde tento kód přeneseme do CodeZapalovač

  • Ke stažení nejnovější verze CodeZapalovač z jejich webová stránka.
  • ExtracUložte obsah zazipovaného souboru do vývojového adresáře v adresáři webového serveru. V této lekci budeme jako název složky používat ciopinionpoll.
  • Přejděte na URL http://localhost/ciopinionpoll/

CodeÚvodní stránka zapalovače zobrazená po extracvytvoření rámce

Jedno CodeÚvodní stránka Igniter výše potvrzuje, že je framework správně nainstalován. Nyní portujeme naši aplikaci pro průzkum veřejného mínění na CodeZapalovač. Připomeňme si, že naše aplikace byla rozdělena do tří hlavních komponent, a to;

  • Přední ovladač – to je část, která reaguje na URL požaduje a vrací požadovanou stránku. Tento kód se vloží do kontroleru.
  • Model – jedná se o kód, který reaguje na požadavky na data a vrací požadovaná data. Tento kód se vloží do modelu.
  • Pohledy – toto je kód zodpovědný za formátování a zobrazování dat. Tento kód přejde do zobrazení

Nastavení konfigurace databáze

Konfigurace připojení k databázi:

  • Přejděte do složky ciopinionpoll.
  • Otevřete databáze.php soubor umístěný v adresáři application/config.
  • Vyhledejte následující řádky kódu

Nastavení konfigurace databáze v CodeSoubor database.php Igniteru

  • Nastavte uživatelské jméno na root
  • Nastavte heslo na heslo root uživatele localhost
  • Nastavte název databáze na opinion_poll. Všimněte si, že budeme používat databázi vytvořenou v předchozí lekci.
  • Uložte změny a zavřete soubor.

Vytváření našeho modelu

Dále vytvoříme náš model, který rozšíří CI_Model. CI_Model je součástí CodeKnihovny Igniter. Model bude umístěn v adresáři application/models. názor_model_modelu.php

<?php
class Opinion_poll_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
        $this->load->database();
    }

    public function total_votes()
    {
        $query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
        return $query->row()->choices_count;
    }

    public function get_results()
    {
        $libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
        $table_rows = '';

        for ($i = 1; $i < 5; $i++)
        {
            $query = $this->db->select('COUNT(choice) as choices_count')
                              ->where('choice', $i)
                              ->get('js_libraries');

            $table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
        }

        return $table_rows;
    }

    public function add_vote($choice)
    {
        $ts = date("Y-m-d H:i:s");
        $data = array('choice' => $choice, 'ts' => $ts);
        $this->db->insert('js_libraries', $data);
    }
}
?>

TADY,

  • „class Opinion_poll_model rozšiřuje CI_Model…“ je náš model, který rozšiřuje CI_Model
  • „parent::__construct();“ volá konstruktor CI_Model
  • “$this->load->database();” načte databázovou knihovnu, aby naše aplikace mohla s databází spolupracovat
  • „$this->db->“ je CodeAktivní záznam zapalovače. Zkontrolujte toto. https://trials.autocruitment.com pro více informací o aktivním záznamu.

Vytvoření našeho kontroleru

Nyní si vytvořme kontroler. Použijeme výchozí CodeŘídicí jednotka zapalovače se nachází v souboru application/controllers/welcome.php. Nahraďte její zdrojový kód následujícím kódem.

<?php

if (!defined('BASEPATH'))  exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function __construct() {

        parent::__construct();

        $this->load->model('opinion_poll_model');

    }

    public function index() {

        if ($this->input->post('submitbutton') && !$this->input->post('vote')) {

            echo "<script>alert('You did not vote!');</script>";

        }

        if ($this->input->post('vote')) {

            $this->opinion_poll_model->add_vote($this->input->post('vote'));

            $data['total_votes'] = $this->opinion_poll_model->total_votes();

            $data['rows'] = $this->opinion_poll_model->get_results();

            $this->load->view('results', $data);

        } else {

            $this->load->view('opinion_poll_form');

        }

    }

}

/* End of file welcome.php */

/* Location: ./application/controllers/welcome.php */
?>

TADY,

  • “if (!defined('BASEPATH')) exit('Není povolen přímý přístup pomocí skriptu');“ zajišťuje, že uživatelé nemají přímý přístup ke třídě kontroléru
  • „class Welcome rozšiřuje CI_Controller…“ náš kontrolér rozšiřuje třídu CI_Controller
  • „Public function __construct()“ volá metodu konstruktoru třídy CI_Controller a načítá náš model Opinion_poll_model
  • „public function index()…“ je funkce, která se mapuje na index.php. Používá CodeVstupní třída Igniteru pro kontrolu, zda byl odeslán hlas, jeho přidání do databáze a zobrazení výsledků. Pokud je pole post vstupní třídy prázdné, načte se stránka pro hlasování.
  • „$this->input->post('…')“ je CodeVstupní třída Igniter, která načítá obsah globální proměnné $_POST.
  • “$this->opinion_poll_model->add_vote($this->input->post('vote'))” volá metodu add_vote modelu pro přidání hlasu do databáze.

Vytváření našich pohledů

Vzpomeňte si z předchozího příkladu, že jsme měli dvě HTML stránky, jednu pro hlasování a druhou pro výsledky. Pro vytvoření našich zobrazení použijeme stejný HTML kód s minimálními úpravami. V adresáři application/views vytvořte následující soubory.

opinion_poll_form.php
<html>
<head>
    <title>
        JavaScript Libraries - Opinion Poll
    </title>
</head>

<body>
    <h2>JavaScript Libraries - Opinion Poll</h2>
    <p><b>What is your favorite JavaScript Library?</b></p>
    <form method="POST" action="index.php">
        <p>
            <input type="radio" name="vote" value="1" /> JQuery
            <br />
            <input type="radio" name="vote" value="2" /> MooTools
            <br />
            <input type="radio" name="vote" value="3" /> YUI Library
            <br />
            <input type="radio" name="vote" value="4" /> Glow </p>
        <p>
            <input type="submit" name="submitbutton" value="OK" />
        </p>
    </form>
</body>
</html>

Nyní vytvoříme stránku výsledků results.php

<html>
    <head>
        <title>JavaScript Libraries - Opinion Poll Results</title>
    </head>
    <body>

        <h2>JavaScript Libraries - Opinion Poll Results</h2>

        <p><b>What is your favorite JavaScript Library?</b></p>

        <p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>

        <p><table><tr><td>

            <?php print($rows); ?>

        </tr></td></table></p>

        <p><a href="#">Return to voting page</a></p>
</body>
</html>

Testování naší aplikace

Za předpokladu, že kořenový adresář vaší aplikace je ciopinionpoll, přejděte do http://localhost/ciopinionpoll/

Formulář pro hlasování v anketě vydaný CodeAplikace zapalovače

Výše uvedená stránka pro hlasování pochází z našeho zobrazení opinion_poll_form. Klikněte na OK bez výběru možnosti a zobrazí se vám následující upozornění.

Ověřovací zpráva zobrazená, pokud není vybrán žádný hlas

Hlasujte pro svou oblíbenou knihovnu a poté klikněte na OK. Zobrazí se vám následující stránka s výsledky.

Stránka s výsledky průzkumu veřejného mínění zobrazující počet hlasů za JavaKnihovna skriptů

To potvrzuje, že tři vrstvy spolupracují: kontroler hlas přijal, model jej uložil a spočítal a zobrazení zobrazilo součty.

Nejčastější dotazy

HMVC (Hierarchical Model View Controller) organizuje aplikaci do nezávislých MVC triád, které se mohou navzájem volat. Frameworky jako například kohana popularizoval HMVC, protože pomáhá modularizovat velké aplikace.

Ano. laravel je v současnosti nejoblíbenějším frameworkem PHP MVC. Dodržuje stejné oddělení Model-View-Controller, jaké je popsáno zde, a přidává nástroje jako šablony Eloquent ORM a Blade.

Ano. Nástroje jako GitHub Copilot může vytvářet modely, kontrolery a pohledy z výzev. Přesto byste měli zkontrolovat vygenerovaný kód, zda neobsahuje bezpečnostní problémy, jako je neescapovaný výstup a SQL injection.

Ne. Asistenti umělé inteligence urychlují psaní kódu, ale frameworky stále poskytují ověřenou strukturu, výchozí nastavení zabezpečení a konvence, které zajišťují udržovatelnost aplikací. Tyto dva prvky fungují nejlépe společně.

Ne. CodeZapalovač je přátelský k vývojářům s omezenými zkušenostmi s objektově orientovaným programováním. Znalost tříd, metod a základní dědičnosti stačí k pochopení vzorů modelů a kontroleru.

Shrňte tento příspěvek takto: