CodePrzykład frameworka Igniter MVC (Model View Controller)

⚡ Inteligentne podsumowanie

CodePlatforma Igniter MVC dzieli aplikację na model, widok i kontroler. Model obsługuje dane i logikę biznesową, kontroler koordynuje żądania, a widok prezentuje wynik, zapewniając luźne powiązanie, elastyczność i wyższą produktywność programistów.

  • 🏗️. Wzorzec rdzeniowy: MVC dzieli aplikację na komponenty modelu, widoku i kontrolera.
  • 💾 Model: Współpracuje ze źródłem danych i przechowuje logikę biznesową, często za pośrednictwem Active Record.
  • 🎛️ Kontroler: Nasłuchuje żądań, weryfikuje dane wejściowe oraz koordynuje model i widok.
  • 🖼️ Widok: Prezentuje dane w formacie HTML, CSS i minimalnie w PHP, bez skomplikowanej logiki.
  • 🔗 Luźne powiązanie: Komponenty działają niezależnie, dzięki czemu praca front-end i back-end może odbywać się równolegle.
  • ⚡ Krótkie tagi: CodeWidoki Igniter powszechnie używają krótkich znaczników echo PHP w celu uzyskania bardziej przejrzystych szablonów.
  • 🔁 Przepływ żądań: Kontroler do modelu do wyświetlenia, następnie HTML z powrotem do przeglądarki.

CodeFramework Igniter MVC

Co to jest MVC?

MVC to skrót od Model-View-Controller. Jest to wzorzec architektoniczny, który dzieli aplikację na trzy główne komponenty:

  1. Model zajmuje się logiką biznesową i interakcjami z bazą danych.
  2. Kontroler koordynuje działania pomiędzy modelem i widokiem.
  3. Widok odpowiada za prezentację danych.

Oto niektóre zalety wzorca architektonicznego MVC:

  • Luźne sprzężenie – komponenty istnieją i działają niezależnie od siebie.
  • Elastyczność – możesz łatwo wprowadzać zmiany w poszczególnych komponentach.
  • Większa produktywność – nad projektem może pracować jednocześnie więcej niż jedna osoba. Programiści front-end mogą pracować nad widokami i prezentacją, podczas gdy programiści back-end koncentrują się na modelach. Ponieważ system jest luźno powiązany, ostatecznie wszystko działa razem.

Model

Model odpowiada za interakcję ze źródłami danych. Zazwyczaj jest to baza danych, ale może to być również usługa dostarczająca żądane dane. Powszechną praktyką jest również przechowywanie logiki biznesowej w modelach, a nie w kontrolerze. Praktyka ta jest zazwyczaj określana jako „gruby model, chudy kontroler”.

Model zazwyczaj zapisuje dane w bazie danych i zapewnia mechanizm edycji, aktualizacji i usuwania danych. W nowoczesnych aplikacjach internetowych modele wykorzystują wzorce projektowe dostępu do danych, takie jak Active Record, aby ułatwić interakcję z bazą danych.

Na przykład, CodeIgniter wykorzystuje wbudowaną bibliotekę Active Record do wspomagania modeli, podczas gdy inne struktury, takie jak Laravel, używają Eloquent Object Relational Mapper (ORM) do uzyskiwania dostępu do danych.

kontroler

Kontroler nasłuchuje przychodzących żądań zasobów od użytkowników. Działa jako pośrednik między modelem a widokiem, a czasami również implementuje pewne reguły biznesowe. Załóżmy, że kontroler otrzymuje żądanie zarejestrowania użytkownika w bazie danych.

Kontroler może przeprowadzić walidację przesłanych danych, aby upewnić się, że wszystkie wymagane parametry są obecne. Jeśli czegoś brakuje, użytkownik jest przekierowywany na stronę rejestracji z odpowiednim komunikatem o błędzie. Kontroler może również poprosić model o przeprowadzenie dalszej walidacji, na przykład sprawdzenie, czy przesłany adres e-mail już istnieje. Jeśli wszystkie reguły walidacji zakończą się powodzeniem, kontroler przesyła dane do modelu w celu przetworzenia i oczekuje na odpowiedź.

Gdy model przetworzy informacje i zwróci pozytywną odpowiedź, kontroler ładuje odpowiedni widok i przekazuje dane zwrócone z modelu jako parametr.

Zobacz

Widok dotyczy danych prezentowanych użytkownikowi końcowemu. W aplikacjach internetowych widoki często zawierają HTML, CSS i opcjonalnie JAVASCRIPTWidoki zawierają minimalną ilość kodu programistycznego, zazwyczaj wystarczającą do przeglądania zbiorów danych otrzymanych z modelu, lub funkcję pomocniczą do czyszczenia danych lub tworzenia linków edycyjnych. Większość współczesnych aplikacji internetowych korzysta z silników szablonów z własną, podobną do pseudokodu składnią, zrozumiałą dla projektantów. Podczas pracy z CodeW Igniterze powszechną praktyką jest używanie krótkich tagów PHP i struktur sterujących. Aby wyświetlić coś w CodeIgniter, możesz użyć następującego kodu:

<?=$title?>

W przeciwieństwie do:

<?php
echo $title;
?>

Struktury sterujące są zazwyczaj zapisywane w następujący sposób:

<?php foreach ($customers as $customer): ?>
<li>
<p><?=$customer->first_name?></p>
</li>
<?php endforeach; ?>

Jak widać na powyższym przykładzie, widok wykorzystuje kombinację PHP i HTML zamiast zamykać wszystko w czystym kodzie PHP.

Jak działają frameworki MVC

Poniższy obraz pokazuje, jak działa framework MVC.

Jak działa framework MVC

Kontroler odbiera żądanie od użytkownika, w razie potrzeby wchodzi w interakcję z modelem bazy danych, a następnie zwraca wynik do przeglądarki w formie kodu HTML, który przeglądarka interpretuje do formatu czytelnego dla człowieka i wyświetla użytkownikowi.

CodeKontroler zapłonu

Przyjrzyjmy się teraz temu, co się stało, gdy załadowaliśmy URL do przeglądarki internetowej. Otwórz plik Welcome.php kontroler znajdujący się w folderze application/controllers. Powinieneś zobaczyć następujący kod:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->view('welcome_message');
}
}

Tutaj:

  • defined('BASEPATH') OR exit('Bezpośredni dostęp do skryptu nie jest dozwolony'); uniemożliwia bezpośredni dostęp do kontrolera, jeśli żądanie nie zostało przesłane przez index.php. Ma to na celu zapewnienie bezpieczeństwa.
  • Klasa Welcome rozszerza CI_Controller {…} definiuje klasę kontrolera Welcome i rozszerza klasę nadrzędną CI_Controller.
  • publiczna funkcja index(){…} definiuje metodę index, która odpowiada na URL http://localhost:3000.
  • $this->load->view('welcome_message'); ładuje widok welcome_message znajdujący się w katalogu application/views.

Teraz zaktualizujemy metodę index w następujący sposób:

public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}

Tutaj:

  • $this->load->model('customers_model'); ładuje model klienta.
  • $data['customer'] = $this->customers_model->get_customer(3); wywołuje metodę get_customer klasy customers_model i przekazuje parametr 3. W tym przykładzie wartość została zakodowana na stałe, ale w rzeczywistych aplikacjach byłby to parametr z identyfikatora URI.
  • $this->load->view('welcome_message',$data); ładuje widok welcome_message i przekazuje zmienną $data.

CodeModel zapłonnika

Utwórzmy teraz model, do którego odwołuje się powyższy kod. Dla uproszczenia nasz model nie będzie wchodził w interakcję z baza danych ale zwróci statyczny rekord klienta. W kolejnych samouczkach zajmiemy się bazami danych. Utwórz plik Customers_model.php w katalogu application/models i dodaj następujący kod:

<?php
class Customers_model extends CI_Model {
public function get_customer($id) {
$data['id'] = 3;
$data['first_name'] = 'John';
$data['last_name'] = 'Doe';
$data['address'] = 'Kingstone';
return $data;
}
}

Tutaj:

  • klasa Customers_model rozszerza CI_Model {…} definiuje model Customers_model, który rozszerza CI_Model.
  • publiczna funkcja get_customer($id) {…} definiuje metodę get_customer na podstawie identyfikatora klienta.
  • $data[…] definiuje wartości statyczne naszego fikcyjnego klienta. Powinien to być wiersz zwrócony z bazy danych.
  • zwróć dane $; zwraca dane klienta.

To wszystko w naszym modelu. Zmodyfikujmy teraz widok welcome_message. Otwórz plik welcome_message.php znajdujący się w:

application/views/welcome_message.php

Zastąp kod następującym:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CodeIgniter MVC Basics</title>
</head>
<body>
<h1>Customer Details Card</h1>
<p>Customer ID : <strong><?=$customer['id']?></strong></p>
<p>First Name : <strong><?=$customer['first_name']?></strong></p>
<p>Last Name : <strong><?=$customer['last_name']?></strong></p>
<p>Address : <strong><?=$customer['address']?></strong></p>
</body>
</html>

Zapisz zmiany i załaduj następujące dane URL w przeglądarce internetowej: http://localhost:3000/Powinieneś zobaczyć kartę klienta, tak jak pokazano na obrazku poniżej.

Karta danych klienta wygenerowana przez CodeZapalnik

FAQ

Oznacza to, że logika biznesowa znajduje się w modelu,ping Kontroler jest cienki i skoncentrowany na żądaniach routingu. Dzięki temu logika jest wielokrotnego użytku, a odczyt i testowanie kontrolera jest łatwiejsze.

Widok powinien prezentować wyłącznie dane.ping logika pozwala na rozdzielenie problemów, dzięki czemu projektanci mogą edytować układ bez naruszania reguł biznesowych, a te same dane mogą być wyświetlane w różnych widokach.

Active Record to wbudowany kreator zapytań, który pozwala modelom odczytywać i zapisywać dane w bazie danych za pomocą wywołań metod zamiast surowego kodu SQL. Pomaga również zapobiegać atakom typu SQL injection przez esca.ping wartości.

Sztuczna inteligencja może generować pasujące pliki kontrolera, modelu i widoku na podstawie opisu funkcji, zachowując przy tym spójność nazewnictwa. Revprzejrzyj wygenerowane zapytania i ich walidację przed uruchomieniem.

Krótki znacznik echo to kompaktowy sposób na wydruk wartości w widoku. Pełny blok znaczników PHP jest używany do instrukcji i struktur sterujących. Oba są równoważne w przypadku danych wyjściowych, ale krótkie znaczniki utrzymują porządek w widokach.

Podsumuj ten post następująco: