Vodič za PHP MVC okvir

⚡ Pametni sažetak

PHP MVC Framework dizajn odvaja podatke aplikacije i poslovnu logiku od prezentacije, koristeći modele, prikaze i kontrolere. CodeIgniter čini ovaj obrazac praktičnim, omogućujući PHP programerima bržu izgradnju sigurnih i održivih web aplikacija.

  • 🧩 Uzorak: MVC dijeli aplikaciju na Model (podaci), View (prezentacija) i Controller (obrada zahtjeva) radi čišćeg koda.
  • 🚀 Produktivnost: Okviri isporučuju unaprijed izgrađene biblioteke za pristup bazi podataka, validaciju i sanitizaciju unosa, tako da timovi brže isporučuju značajke.
  • 🛠️ Opcije: CodeIgniter, CakePHP i Laminas (ranije Zend) ostaju aktivni izbori, dok je Kohana ukinut 2017. godine.
  • 🗄️ Model: In CodeIgniter, modeli proširuju CI_Model i koriste metode Query Buildera za sigurne operacije s bazom podataka.
  • 🎮 kontroler: Kontroleri proširuju CI_Controller, čitaju korisnički unos kroz ulaznu klasu i učitavaju ispravan prikaz.
  • 📈 Udarac: Prenošenje jednostavne PHP aplikacije za ankete pokazuje kako MVC struktura smanjuje dupliciranje i pojednostavljuje dugoročno održavanje.

PHP MVC okvir

Što je PHP MVC okvir?

PHP MVC je obrazac dizajna aplikacije koji odvaja podatke aplikacije i poslovnu logiku (model) od prezentacije (pogleda). MVC je kratica za Model, View & Controller.

Kontroler posreduje između modela i pogleda.

Razmišljajte o MVC uzorku dizajna kao o automobilu i vozaču.

Automobil ima vjetrobranska stakla (pogled) koja vozač (kontrolor) koristi za praćenje prometa ispred sebe, a zatim ubrzava ili koči (model) ovisno o tome što vidi ispred sebe.

Zatim, pogledajmo zašto se isplati koristiti okvir izgrađen na ovom obrascu.

Zašto koristiti PHP MVC Framework?

PHP MVC okviri pojednostavljuju rad sa složenim tehnologijama na sljedeći način:

  • Skrivanje svih složenih detalja implementacije
  • Pružanje standardnih metoda koje možemo koristiti za izgradnju naših aplikacija
  • Povećanje produktivnosti programera, jer su osnovne implementacije aktivnosti poput povezivanja s bazom podataka i sanitizacije korisničkog unosa već djelomično implementirane
  • Poticanje pridržavanja profesionalnih standarda kodiranja

PHP MVC uzorak dizajna

Hajde sada ukratko raspraviti svaku komponentu MVC uzorka dizajna.

Model – ovaj dio se bavi poslovnom logikom i podacima aplikacije. Može se koristiti za provjeru valjanosti podataka, obradu podataka i njihovo pohranjivanje. Podaci mogu doći iz;

  • ravna turpija
  • baza podataka
  • XML dokument
  • Ostali valjani izvori podataka.

kontrolor – ovo je dio koji se bavi korisničkim zahtjevima za resursima od poslužitelja.

Na primjer, kada korisnik zatraži URL …/index.php?products=list, kontroler će učitati model proizvoda kako bi dohvatio podatke o proizvodima, a zatim će rezultate prikazati u prikazu popisa.

Ukratko, kontroler povezuje modele i poglede zajedno ovisno o traženim resursima.

Posjeta – ovaj dio se bavi predstavljanjem podataka korisniku. To je obično u obliku HTML stranica.

Vrste PHP MVC okvira

Odabir najboljeg PHP okvira je izazov.

Ne morate napisati vlastiti okvir da biste imali koristi od prednosti MVC-a.

Trebali biste samo pokušati izraditi vlastiti dizajn aplikacije koji se odnosi na MVC kako biste razumjeli kako rade MVC okviri.

Nakon što se upoznate s načinom na koji MVC okviri rade, trebali biste prijeći na zrele i već testirane okvire.

Donja tablica ukratko opisuje neke od popularnih PHP frameworkova i značajke koje svaki framework nudi.

Okvir Description

Codeupaljač


Codeupaljač


https://codeigniter.com/

To je jedan od najpopularnijih PHP MVC frameworka, sada u svojoj četvrtoj glavnoj verziji (CodeIgniter 4). Lagan je i ima kratku krivulju učenja. Ima bogat skup biblioteka koje pomažu u brzoj izradi web stranica i aplikacija. Mogu ga koristiti i korisnici s ograničenim znanjem OOP programiranja. Aplikacije izgrađene s CodeUključuje upaljač;


kohana


kohana


http://kohanaframework.org

To je siguran i lagan okvir Hijerarhijskog kontrolera prikaza modela (HMVC). Bilješka: Kohana je službeno ukinuta 2017.; njezino posljednje stabilno izdanje bilo je 3.3.6 (srpanj 2016.). Zajednički fork Koseven nastavio je s njegovom kodnom bazom. Tvrtke koje su koristile Kohanu uključuju;


CakePHP


CakePHP


www.cakephp.org

Izrađen je po uzoru na Ruby on Rails i aktivno se održava (verzija 5.x). Poznat je po konceptima kao što su obrasci dizajna softvera, konvencija umjesto konfiguracije, ActiveRecord itd. CakePHP pokretane aplikacije uključuju;


stari persijski jezik

https://getlaminas.org/


Zend (sada Laminas)

To je snažan okvir koji je;

  • Siguran, pouzdan, brz i skalabilan
  • Podržava izradu web servisa i API-ja.

Idealan je za razvojping poslovne aplikacije. Godine 2020. Zend Framework je prešao na projekt otvorenog koda Laminas. Aplikacije pokrenute platformom Zend/Laminas uključuju;

  • Pimcore CMS,
  • DotKernel.

Tvrtke koje su koristile Zend framework uključuju;

  • BBC
  • Cisco
  • Webex
  • Offers.com

PHP MVC Framework u odnosu na obični PHP: Ključne razlike

Što framework zapravo mijenja u praksi? Običan PHP vam daje potpunu slobodu, ali svaki projekt na kraju iznova izmišlja usmjeravanje, validaciju i pristup bazi podataka od nule. PHP MVC framework standardizira ove repetitivne zadatke, tako da vaš kod ostaje dosljedan u svim projektima i timovima.

Aspekt Obični PHP PHP MVC okvir
Code organizacija Miješani HTML, SQL i logika u pojedinačnim datotekama Podijeljeno na modele, poglede i kontrolere
Pristup bazi podataka Rukom pisani upiti na svakoj stranici Ugrađeni alat za izradu upita ili ORM s povezivanjem parametara
Sigurnost Programer mora imati na umu sve mjere opreza Uključeno filtriranje ulaza, XSS i CSRF zaštita
održavanje Promjene se nepredvidivo šire kroz datoteke Svaki sloj se može mijenjati neovisno

💡 Savjet: Prvo izgradite jedan mali, jednostavan PHP projekt, poput ankete u nastavku; muka miješanog koda čini vrijednost MVC odvajanja očitom.

Prenošenje aplikacije za anketu na Codeupaljač

U ovom udžbenik, kreirali smo PHP aplikaciju za ankete. Ovdje ćemo taj kod prenijeti na Codeupaljač

  • Preuzimanje najnovija verzija CodeUpaljač od njihovog web stranicu.
  • ExtracSadržaj zip datoteke spremite u svoj razvojni direktorij u direktoriju vašeg web poslužitelja. U ovoj lekciji koristit ćemo ciopinionpoll kao naziv mape.
  • Pregledajte URL http://localhost/ciopinionpoll/

CodePočetna stranica Ignitera prikazana nakon ex-atracpostavljanje okvira

The CodePočetna stranica Ignitera potvrđuje da je okvir ispravno instaliran. Sada ćemo prenijeti našu aplikaciju za anketiranje na CodeUpaljač. Podsjetimo se da je naša aplikacija bila podijeljena u tri glavne komponente, naime;

  • Prednji kontroler – ovo je dio koji reagira na URL zahtijeva i vraća traženu stranicu. Ovaj kod će ići u kontroler
  • Model – ovo je kod koji odgovara na zahtjeve za podacima i vraća tražene podatke. Ovaj kod će ući u model
  • Pogledi – ovo je kod odgovoran za formatiranje i prikaz podataka. Ovaj kôd će ići u prikaz

Postavke konfiguracije baze podataka

Za konfiguriranje veze s bazom podataka:

  • Pregledajte mapu ciopinionpoll
  • Otvorite baza podataka.php datoteka koja se nalazi u direktoriju application/config.
  • Pronađite sljedeće retke koda

Postavke konfiguracije baze podataka u CodeDatoteka baze podataka Ignitera.php

  • Postavite korisničko ime na root
  • Postavite lozinku na svoju root lozinku lokalnog hosta
  • Postavite naziv baze podataka na opinion_poll. Imajte na umu da ćemo koristiti bazu podataka kreiranu u prethodnoj lekciji.
  • Spremite promjene i zatvorite datoteku.

Izrada našeg modela

Zatim ćemo stvoriti naš model koji će proširiti CI_Model. CI_Model je dio CodeBiblioteke Ignitera. Model će se nalaziti u aplikaciji/modelima model_ankete_mnijenja.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);
    }
}
?>

OVDJE,

  • “class Opinion_poll_model extends CI_Model…” je naš model koji proširuje CI_Model
  • „parent::__construct();“ poziva konstruktor CI_Model
  • “$this->load->database();” učitava biblioteku baze podataka tako da naša aplikacija može komunicirati s bazom podataka
  • „$this->db->“ je CodeAktivni zapis Ignitera. Provjerite ovo link za više informacija o aktivnom zapisu.

Izrada našeg kontrolera

Sada stvorimo kontroler. Koristit ćemo zadane CodeKontroler paljenja nalazi se u datoteci application/controllers/welcome.php. Zamijenite njegov izvorni kod sljedećim kodom.

<?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 */
?>

OVDJE,

  • “if (!defined('BASEPATH')) exit('Nije dopušten izravan pristup skripti');” osigurava da korisnici ne pristupaju izravno klasi kontrolera
  • “class Welcome extends CI_Controller…” naš kontroler proširuje klasu CI_Controller
  • „public function __construct()“ poziva metodu konstruktora klase CI_Controller i učitava naš model Opinion_poll_model
  • „public function index()…“ je funkcija koja se preslikava na index.php. Koristi CodeIgniterova ulazna klasa provjerava je li glas poslan, dodaje ga u bazu podataka, a zatim prikazuje rezultate. Ako je niz post ulazne klase prazan, učitava stranicu za glasanje.
  • „$this->input->post('…')” je CodeUlazna klasa Igniter koja dohvaća sadržaj globalne varijable $_POST.
  • “$this->opinion_poll_model->add_vote($this->input->post('vote'))” poziva metodu modela add_vote za dodavanje glasova u bazu podataka.

Stvaranje naših pogleda

Podsjetimo se iz prethodnog primjera da smo imali dvije HTML stranice, jednu za glasanje i drugu za rezultate. Koristit ćemo isti HTML kod s minimalnim izmjenama za izradu naših prikaza. Izradite sljedeće datoteke u direktoriju application/views

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>

Kreirajmo sada stranicu s rezultatima 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>

Testiranje naše aplikacije

Pod pretpostavkom da je korijenski direktorij vaše aplikacije ciopinionpoll, idite na http://localhost/ciopinionpoll/

Obrazac za glasanje u anketi koju je izradio CodePrimjena upaljača

Gornja stranica za glasanje dolazi iz našeg prikaza opinion_poll_form. Kliknite U redu bez odabira opcije i vidjet ćete sljedeću poruku upozorenja

Poruka upozorenja o validaciji prikazuje se kada nije odabran nijedan glas

Glasajte za svoju omiljenu knjižnicu, a zatim kliknite U redu. Vidjet ćete sljedeću stranicu s rezultatima

Stranica s rezultatima ankete koja prikazuje broj glasova po JavaBiblioteka skripti

To potvrđuje da tri sloja rade zajedno: kontroler je primio glas, model ga je pohranio i prebrojao, a prikaz je prikazao ukupne iznose.

Pitanja i odgovori

HMVC (Hierarchical Model View Controller) organizira aplikaciju u neovisne MVC trijade koje mogu pozivati ​​jedna drugu. Okviri kao što su kohana popularizirao je HMVC jer pomaže u modularizaciji velikih aplikacija.

Da. Laravel je trenutno najpopularniji PHP MVC framework. Slijedi istu ovdje opisanu razdvajanje Model-View-Controller, dodajući alate poput Eloquent ORM i Blade predložaka.

Da. Alati poput GitHub kopilot može iz promptova izgraditi modele, kontrolere i prikaze. I dalje biste trebali pregledati generirani kod zbog sigurnosnih problema kao što su neizbjegnuti izlaz i SQL injekcija.

Ne. AI asistenti ubrzavaju pisanje koda, ali okviri i dalje pružaju testiranu strukturu, sigurnosne zadane postavke i konvencije koje održavaju aplikacije održivima. To dvoje najbolje funkcionira zajedno.

Ne. Codeupaljač prilagođen je programerima s ograničenim iskustvom u objektno orijentiranom programiranju. Poznavanje klasa, metoda i osnovnog nasljeđivanja dovoljno je za praćenje obrazaca modela i kontrolera.

Sažmite ovu objavu uz: