Samouczek dotyczący frameworka PHP MVC

⚡ Inteligentne podsumowanie

Projekt PHP MVC Framework oddziela dane aplikacji i logikę biznesową od prezentacji za pomocą modeli, widoków i kontrolerów. CodeIgniter sprawia, że ​​ten wzorzec staje się praktyczny, umożliwiając programistom PHP szybsze tworzenie bezpiecznych i łatwych w utrzymaniu aplikacji internetowych.

  • 🧩 Wzór: MVC dzieli aplikację na Model (dane), Widok (prezentacja) i Kontroler (obsługa żądań) w celu uzyskania bardziej przejrzystego kodu.
  • 🚀 Wydajność: Frameworki zawierają wstępnie zbudowane biblioteki do dostępu do bazy danych, walidacji i oczyszczania danych wejściowych, dzięki czemu zespoły mogą szybciej dostarczać funkcje.
  • 🛠️. Opcje: CodeIgniter, CakePHP i Laminas (dawniej Zend) pozostają aktywnymi opcjami, natomiast Kohana została wycofana w 2017 r.
  • 🗄️ Model: In CodeIgniter, modele rozszerzają CI_Model i wykorzystują metody Query Builder w celu zapewnienia bezpieczeństwa operacji na bazach danych.
  • 🎮 Kontroler: Kontrolery rozszerzają klasę CI_Controller, odczytują dane wejściowe użytkownika za pośrednictwem klasy wejściowej i ładują odpowiedni widok.
  • 📈 Wpływ: Przeniesienie prostej aplikacji ankietowej PHP pokazuje, w jaki sposób struktura MVC ogranicza duplikację i upraszcza długoterminową konserwację.

Framework PHP MVC

Co to jest framework PHP MVC?

PHP MVC to wzorzec projektowania aplikacji, który oddziela dane aplikacji i logikę biznesową (model) od prezentacji (widoku). MVC oznacza model, widok i kontroler.

Kontroler pośredniczy pomiędzy modelami i widokami.

Pomyśl o wzorcu projektowym MVC jak o samochodzie i kierowcy.

Samochód ma przednią szybę (view), za pomocą której kierowca (controller) monitoruje ruch przed pojazdem, a następnie przyspiesza lub hamuje (model) w zależności od tego, co widzi przed sobą.

Następnie sprawdźmy, dlaczego warto używać struktury opartej na tym wzorcu.

Dlaczego warto używać PHP MVC Framework?

Frameworki PHP MVC upraszczają pracę ze złożonymi technologiami poprzez:

  • Ukrywanie wszystkich skomplikowanych szczegółów implementacji
  • Zapewnianie standardowych metod, których możemy używać do tworzenia naszych aplikacji
  • Zwiększenie produktywności programistów, ponieważ podstawowe implementacje takich działań, jak łączenie się z bazą danych i oczyszczanie danych wprowadzanych przez użytkownika, są już częściowo wdrożone
  • Zachęcanie do przestrzegania profesjonalnych standardów kodowania

Wzorzec projektowy PHP MVC

Omówmy teraz pokrótce każdy komponent wzorca projektowego MVC.

Model – ta część dotyczy logiki biznesowej i danych aplikacji. Może służyć do przeprowadzania walidacji danych, przetwarzania danych i ich przechowywania. Dane mogą pochodzić z;

  • płaski plik
  • baza danych
  • Dokument XML
  • Inne ważne źródła danych.

kontroler – ta część zajmuje się obsługą żądań użytkownika dotyczących zasobów serwera.

Na przykład, gdy użytkownik poprosi o URL …/index.php?products=listaKontroler załaduje model produktów w celu pobrania danych produktów, a następnie wyświetli wyniki w widoku listy.

Krótko mówiąc, kontroler łączy ze sobą modele i widoki w zależności od żądanych zasobów.

odwiedzajacy – ta część zajmuje się prezentacją danych użytkownikowi. Zazwyczaj ma to formę stron HTML.

Rodzaje frameworka PHP MVC

Wybór najlepszego frameworka PHP jest wyzwaniem.

Nie musisz pisać własnego frameworka, aby skorzystać z zalet MVC.

Powinieneś próbować stworzyć własny projekt aplikacji związany z MVC, aby zrozumieć, jak działają frameworki MVC.

Kiedy już poczujesz się komfortowo ze sposobem działania frameworków MVC, powinieneś przejść do dojrzałych i już przetestowanych frameworków.

Poniższa tabela w skrócie opisuje niektóre popularne frameworki PHP i funkcje, jakie oferuje każdy z nich.

OPIS

CodeZapalnik


CodeZapalnik


https://codeigniter.com/

Jest to jeden z najpopularniejszych frameworków PHP MVC, obecnie dostępny w czwartej głównej wersji (CodeIgniter 4). Jest lekki i ma krótką krzywą uczenia się. Posiada bogaty zestaw bibliotek, które pomagają szybko tworzyć strony internetowe i aplikacje. Mogą z niego korzystać również użytkownicy z ograniczoną wiedzą z zakresu programowania obiektowego. Aplikacje zbudowane za pomocą CodeZapłon zawiera:


kohana


kohana


http://kohanaframework.org

To bezpieczne i lekkie środowisko Hierarchical Model View Controller (HMVC). Uwaga: Kohana została oficjalnie wycofana w 2017 roku; jej ostatnia stabilna wersja to 3.3.6 (lipiec 2016). Społecznościowy fork Koseven kontynuował jego kod. Firmy, które korzystały z Kohany, to m.in.:


CakePHP


CakePHP


www.cakephp.org

Jest wzorowany na Ruby on Rails i jest nadal aktywnie rozwijany (wersja 5.x). Znany jest z takich koncepcji jak wzorce projektowania oprogramowania, konwencja nad konfiguracją, ActiveRecord itp. CakePHP zasilane aplikacje obejmują;


Zend

https://getlaminas.org/


Zend (obecnie Laminas)

Jest to potężna platforma;

  • Bezpieczne, niezawodne, szybkie i skalowalne
  • Wspiera tworzenie usług sieciowych i interfejsów API.

Idealnie nadaje się do rozwojuping Aplikacje biznesowe. W 2020 roku Zend Framework przeszedł na projekt open source Laminas. Aplikacje oparte na Zend/Laminas obejmują:

  • CMS Pimcore,
  • Jądro kropki.

Firmy, które wykorzystały Zend Framework to m.in.:

  • BBC
  • Cisco
  • Webex
  • Oferty.com

Framework PHP MVC a zwykły PHP: kluczowe różnice

Co tak naprawdę zmienia framework w praktyce? Zwykły PHP daje pełną swobodę, ale każdy projekt kończy się koniecznością tworzenia od podstaw routingu, walidacji i dostępu do bazy danych. Framework PHP MVC standaryzuje te powtarzalne zadania, dzięki czemu kod pozostaje spójny w różnych projektach i zespołach.

WYGLĄD Zwykły PHP Framework PHP MVC
Code organizacja Mieszany HTML, SQL i logika w pojedynczych plikach Podzielone na modele, widoki i kontrolery
Dostęp do bazy danych Ręcznie pisane zapytania na każdej stronie Wbudowany kreator zapytań lub ORM z powiązaniem parametrów
Ochrona Deweloper musi pamiętać o wszystkich zabezpieczeniach Włączono filtrowanie wejściowe, ochronę XSS i CSRF
Konserwacja Zmiany rozprzestrzeniają się nieprzewidywalnie w plikach Każda warstwa może zmieniać się niezależnie

💡 Wskazówka: Na początek zbuduj jeden mały, prosty projekt PHP, taki jak ten w ankiecie poniżej; problemy związane z mieszanym kodem uwidaczniają wartość oddzielenia MVC.

Przeniesienie aplikacji do sondaży opinii publicznej CodeZapalnik

W tym TutorialStworzyliśmy aplikację ankietową PHP. Tutaj przeniesiemy ten kod do CodeZapalnik

  • Pobierz najnowsza wersja CodeZapalnik od nich stronie internetowej.
  • ExtracPrzenieś zawartość spakowanego pliku do katalogu rozwojowego w katalogu serwera WWW. W tej lekcji użyjemy nazwy folderu ciopinionpoll.
  • Przejdź do URL http://localhost/ciopinionpoll/

CodeStrona powitalna Ignitera pokazana po wyświetleniutractworzenie ram

CodePowyższa strona powitalna Ignitera potwierdza poprawną instalację frameworka. Teraz przeniesiemy naszą aplikację do ankietowania opinii do… CodeZapłonnik. Przypomnijmy, że nasza aplikacja składała się z trzech głównych komponentów, a mianowicie:

  • Kontroler przedni – to część, która reaguje na URL Żąda i zwraca żądaną stronę. Ten kod zostanie przesłany do kontrolera.
  • Model – to kod, który odpowiada na żądania danych i zwraca żądane dane. Ten kod zostanie wprowadzony do modelu.
  • Widoki – jest to kod odpowiedzialny za formatowanie i wyświetlanie danych. Ten kod zostanie wyświetlony w widoku

Ustawienia konfiguracji bazy danych

Aby skonfigurować połączenie z bazą danych:

  • Przejdź do folderu ciopinionpoll
  • Otwórz baza danych.php plik znajduje się w katalogu application/config.
  • Znajdź następujące wiersze kodu

Ustawienia konfiguracji bazy danych w CodePlik bazy danych Igniter.php

  • Ustaw nazwę użytkownika na root
  • Ustaw hasło dla hasła root swojego hosta lokalnego
  • Ustaw nazwę bazy danych na opinion_poll. Uwaga: będziemy korzystać z bazy danych utworzonej w poprzedniej lekcji.
  • Zapisz zmiany i zamknij plik.

Tworzenie naszego modelu

Następnie utworzymy nasz model, który rozszerzy CI_Model. CI_Model jest częścią CodeBiblioteki Ignitera. Model będzie znajdować się w folderze application/models opinia_poll_model.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);
    }
}
?>

TUTAJ,

  • „class Opinion_poll_model rozszerza CI_Model…” to nasz model, który rozszerza CI_Model
  • „parent::__construct();” wywołuje konstruktor CI_Model
  • „$this->load->database();” ładuje bibliotekę bazy danych, dzięki czemu nasza aplikacja może wchodzić w interakcję z bazą danych
  • „$this->db->” to CodeAktywny rekord Ignitera. Sprawdź to link aby uzyskać więcej informacji na temat aktywnego rekordu.

Tworzenie naszego kontrolera

Utwórzmy teraz kontroler. Użyjemy domyślnego CodeKontroler Igniter znajduje się w pliku application/controllers/welcome.php. Zastąp jego kod źródłowy poniższym kodem.

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

TUTAJ,

  • „if (!definiowane('BASEPATH')) exit('Brak bezpośredniego dostępu do skryptu');” zapewnia, że ​​użytkownicy nie mają bezpośredniego dostępu do klasy kontrolera
  • „klasa Welcome rozszerza CI_Controller…” nasz kontroler rozszerza klasę CI_Controller
  • „publiczna funkcja __construct()” wywołuje metodę konstruktora klasy CI_Controller i ładuje nasz model Opinion_poll_model
  • „publiczna funkcja index()…” to funkcja mapująca do index.php. Używa CodeKlasa wejściowa Ignitera sprawdza, czy głos został oddany, dodaje go do bazy danych, a następnie wyświetla wyniki. Jeśli tablica postów klasy wejściowej jest pusta, wczytuje stronę głosowania.
  • „$this->input->post('…')” to CodeKlasa wejściowa Igniter pobierająca zawartość zmiennej globalnej $_POST.
  • „$this->opinion_poll_model->add_vote($this->input->post('vote'))” wywołuje metodę add_vote modelu w celu dodania głosu do bazy danych.

Tworzenie naszych poglądów

Przypomnij sobie z poprzedniego przykładu, że mieliśmy dwie strony HTML: jedną do głosowania, a drugą do wyników. Użyjemy tego samego kodu HTML z minimalnymi modyfikacjami, aby utworzyć nasze widoki. Utwórz następujące pliki w katalogu 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>

Stwórzmy teraz stronę wyników 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>

Testowanie naszej aplikacji

Zakładając, że katalog główny Twojej aplikacji to ciopinionpoll, przejdź do http://localhost/ciopinionpoll/

Formularz głosowania w sondażu opinii publicznej udostępniony przez CodeAplikacja zapłonnika

Powyższa strona głosowania pochodzi z naszego widoku opinion_poll_form. Kliknij OK bez wybierania opcji, a zobaczysz następujący komunikat ostrzegawczy.

Komunikat ostrzegawczy o walidacji wyświetlany, gdy nie oddano żadnego głosu

Zagłosuj na swoją ulubioną bibliotekę, a następnie kliknij OK. Zobaczysz następującą stronę z wynikami.

Strona z wynikami sondaży pokazująca liczbę głosów na osobę JavaBiblioteka skryptów

Potwierdza to współpracę trzech warstw: kontroler odebrał głos, model go zapisał i zliczył, a widok wyświetlił sumy.

FAQ

HMVC (Hierarchiczny Kontroler Modelu i Widoku) organizuje aplikację w niezależne triady MVC, które mogą się wzajemnie wywoływać. Frameworki takie jak kohana spopularyzował HMVC, ponieważ pomaga modularnie tworzyć duże aplikacje.

Tak. laravel jest obecnie najpopularniejszym frameworkiem PHP MVC. Wykorzystuje on opisany tutaj podział Model-View-Controller, dodając narzędzia takie jak Eloquent ORM i szablony Blade.

Tak. Narzędzia takie jak Drugi pilot GitHub Można tworzyć szkielety modeli, kontrolerów i widoków z poziomu monitów. Należy jednak nadal sprawdzać wygenerowany kod pod kątem problemów bezpieczeństwa, takich jak brak kodowania i ataki typu SQL injection.

Nie. Asystenci AI przyspieszają pisanie kodu, ale frameworki nadal zapewniają przetestowaną strukturę, domyślne ustawienia zabezpieczeń i konwencje, które zapewniają łatwość utrzymania aplikacji. Te dwa rozwiązania najlepiej działają razem.

Nie. CodeZapalnik jest przyjazny dla programistów z ograniczonym doświadczeniem w programowaniu obiektowym. Znajomość klas, metod i podstaw dziedziczenia wystarcza, aby korzystać z jego modelu i wzorców kontrolerów.

Podsumuj ten post następująco: