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.

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 | |
|---|---|
|
|
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:
|
|
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.: |
|
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ą; |
|
|
Jest to potężna platforma;
Idealnie nadaje się do rozwojuping Aplikacje biznesowe. W 2020 roku Zend Framework przeszedł na projekt open source Laminas. Aplikacje oparte na Zend/Laminas obejmują:
Firmy, które wykorzystały Zend Framework to m.in.:
|
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/
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
- 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/
Powyższa strona głosowania pochodzi z naszego widoku opinion_poll_form. Kliknij OK bez wybierania opcji, a zobaczysz następujący komunikat ostrzegawczy.
Zagłosuj na swoją ulubioną bibliotekę, a następnie kliknij OK. Zobaczysz następującą stronę z wynikami.
Potwierdza to współpracę trzech warstw: kontroler odebrał głos, model go zapisał i zliczył, a widok wyświetlił sumy.








