CodeΠαράδειγμα πλαισίου Igniter MVC (Ελεγκτής προβολής μοντέλου)

⚡ Έξυπνη Σύνοψη

CodeΤο Igniter MVC Framework χωρίζει μια εφαρμογή σε Μοντέλο, Προβολή και Ελεγκτή. Το μοντέλο χειρίζεται δεδομένα και επιχειρηματική λογική, ο ελεγκτής συντονίζει τα αιτήματα και η προβολή παρουσιάζει το αποτέλεσμα, προσφέροντας χαλαρή σύνδεση, ευελιξία και υψηλότερη παραγωγικότητα προγραμματιστών.

  • Βασικό μοτίβο: Το MVC διαιρεί μια εφαρμογή σε στοιχεία μοντέλου, προβολής και ελεγκτή.
  • 💾 Μοντέλο: Αλληλεπιδρά με την πηγή δεδομένων και διατηρεί την επιχειρηματική λογική, συχνά μέσω της Ενεργής Εγγραφής.
  • Ελεγκτής: Ακούει αιτήματα, επικυρώνει τα δεδομένα εισόδου και συντονίζει το μοντέλο και την προβολή.
  • Θέα: Παρουσιάζει τα δεδομένα ως HTML, CSS και ελάχιστη PHP, χωρίς βαριά λογική.
  • 🔗 Χαλαρή σύζευξη: Τα στοιχεία λειτουργούν ανεξάρτητα, επομένως η εργασία front-end και back-end μπορεί να εκτελείται παράλληλα.
  • Σύντομες ετικέτες: CodeΟι προβολές του Igniter χρησιμοποιούν συνήθως σύντομες ετικέτες echo PHP για καθαρότερα πρότυπα.
  • 🔁 Ροή αιτήματος: Ελεγκτής στο μοντέλο για προβολή και, στη συνέχεια, HTML πίσω στο πρόγραμμα περιήγησης.

CodeΠλαίσιο MVC του Igniter

Τι είναι το MVC;

Το MVC σημαίνει Model-View-Controller. Είναι ένα αρχιτεκτονικό μοτίβο που χωρίζει την εφαρμογή σε τρία κύρια στοιχεία:

  1. Το μοντέλο ασχολείται με την επιχειρηματική λογική και τις αλληλεπιδράσεις με τις βάσεις δεδομένων.
  2. Ο ελεγκτής συντονίζει τις δραστηριότητες μεταξύ του μοντέλου και της προβολής.
  3. Η προβολή είναι υπεύθυνη για την παρουσίαση δεδομένων.

Τα ακόλουθα είναι μερικά από τα πλεονεκτήματα του αρχιτεκτονικού προτύπου MVC:

  • Χαλαρή σύζευξη – τα εξαρτήματα υπάρχουν και λειτουργούν ανεξάρτητα το ένα από το άλλο.
  • Ευελιξία – μπορείτε εύκολα να κάνετε αλλαγές σε μεμονωμένα στοιχεία.
  • Αυξημένη παραγωγικότητα – περισσότερα από ένα άτομα μπορούν να εργαστούν στο έργο ταυτόχρονα. Οι front-end προγραμματιστές μπορούν να εργαστούν σε προβολές και παρουσιάσεις, ενώ οι back-end προγραμματιστές επικεντρώνονται σε μοντέλα, και επειδή το σύστημα είναι χαλαρά συνδεδεμένο, όλα λειτουργούν μαζί στο τέλος.

Μοντέλο

Το μοντέλο είναι υπεύθυνο για την αλληλεπίδραση με τις πηγές δεδομένων. Συνήθως πρόκειται για μια βάση δεδομένων, αλλά μπορεί επίσης να είναι μια υπηρεσία που παρέχει τα ζητούμενα δεδομένα. Είναι επίσης συνήθης πρακτική να διατηρείται η επιχειρηματική λογική στα μοντέλα και όχι στον ελεγκτή. Αυτή η πρακτική συνήθως ονομάζεται «χοντρό μοντέλο, αδύνατος ελεγκτής».

Το μοντέλο συνήθως γράφει δεδομένα στη βάση δεδομένων και παρέχει έναν μηχανισμό για την επεξεργασία, την ενημέρωση και τη διαγραφή δεδομένων. Σε μια σύγχρονη διαδικτυακή εφαρμογή, τα μοντέλα χρησιμοποιούν μοτίβα σχεδίασης πρόσβασης δεδομένων, όπως το Active Record, για να διευκολύνουν την αλληλεπίδραση με τη βάση δεδομένων.

Για παράδειγμα, CodeΤο Igniter χρησιμοποιεί μια ενσωματωμένη βιβλιοθήκη Active Record για να βοηθήσει τα μοντέλα, ενώ άλλα frameworks όπως το Laravel χρησιμοποιούν το Eloquent Object Relational Mapper (ORM) για πρόσβαση σε δεδομένα.

ελεγκτής

Ο ελεγκτής ακούει για εισερχόμενα αιτήματα για πόρους από χρήστες. Λειτουργεί ως ενδιάμεσος μεταξύ του μοντέλου και της προβολής και κατά καιρούς εφαρμόζει και ορισμένους επιχειρηματικούς κανόνες. Ας υποθέσουμε ότι ο ελεγκτής λαμβάνει ένα αίτημα για την εγγραφή ενός χρήστη στη βάση δεδομένων.

Ο ελεγκτής μπορεί να εκτελέσει επικύρωση δεδομένων σε ό,τι έχει υποβληθεί για να διασφαλίσει ότι υπάρχουν όλες οι απαιτούμενες παράμετροι. Εάν λείπει κάτι, ο χρήστης ανακατευθύνεται στη σελίδα εγγραφής με το κατάλληλο μήνυμα σφάλματος. Ο ελεγκτής μπορεί επίσης να ζητήσει από το μοντέλο να εκτελέσει περαιτέρω επικύρωση, όπως να ελέγξει εάν η υποβληθείσα διεύθυνση email υπάρχει ήδη. Εάν όλοι οι κανόνες επικύρωσης είναι επιτυχείς, ο ελεγκτής υποβάλλει τα δεδομένα στο μοντέλο για επεξεργασία και περιμένει την απάντηση.

Μόλις το μοντέλο επεξεργαστεί τις πληροφορίες και επιστρέψει θετική απόκριση, ο ελεγκτής φορτώνει την κατάλληλη προβολή και μεταβιβάζει τα δεδομένα που επιστρέφονται από το μοντέλο ως παράμετρος.

Προβολή

Η προβολή ασχολείται με δεδομένα που παρουσιάζονται στον τελικό χρήστη. Στις εφαρμογές Ιστού, οι προβολές συχνά περιέχουν HTML, CSS και προαιρετικά JavaΓραφήΟι προβολές περιέχουν ελάχιστο κώδικα προγραμματισμού, συνήθως αρκετό για να κάνει επανάληψη σε συλλογές δεδομένων που λαμβάνονται από το μοντέλο ή μια βοηθητική συνάρτηση για τον καθαρισμό δεδομένων ή τη δημιουργία συνδέσμων επεξεργασίας. Οι περισσότερες σύγχρονες εφαρμογές ιστού χρησιμοποιούν μηχανές δημιουργίας προτύπων με τη δική τους σύνταξη τύπου ψευδοκώδικα που οι σχεδιαστές μπορούν να κατανοήσουν. Όταν εργάζεστε με CodeΣτο Igniter, είναι συνηθισμένη πρακτική η χρήση σύντομων ετικετών PHP και δομών ελέγχου. Για να εμφανίσετε κάτι σε CodeIgniter, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα:

<?=$title?>

Σε αντίθεση με:

<?php
echo $title;
?>

Οι δομές ελέγχου συνήθως γράφονται ως εξής:

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

Όπως μπορείτε να δείτε από το παραπάνω παράδειγμα, η προβολή χρησιμοποιεί έναν συνδυασμό PHP και HTML αντί να περικλείει τα πάντα σε καθαρό κώδικα PHP.

Πώς λειτουργούν τα πλαίσια MVC

Η παρακάτω εικόνα δείχνει πώς λειτουργεί το πλαίσιο MVC.

Πώς λειτουργεί το πλαίσιο MVC

Ένας ελεγκτής λαμβάνει το αίτημα από τον χρήστη, αλληλεπιδρά με το μοντέλο βάσης δεδομένων, εάν είναι απαραίτητο, και στη συνέχεια επιστρέφει το αποτέλεσμα στο πρόγραμμα περιήγησης με τη μορφή κώδικα HTML, τον οποίο το πρόγραμμα περιήγησης ερμηνεύει σε μορφή αναγνώσιμη από τον άνθρωπο και εμφανίζει στον χρήστη.

CodeΕλεγκτής ανάφλεξης

Ας αναλύσουμε τώρα τι συνέβη όταν φορτώσαμε το URL στο πρόγραμμα περιήγησης ιστού. Ανοίξτε το αρχείο Welcome.php controller που βρίσκεται στο application/controllers. Θα πρέπει να δείτε τον ακόλουθο κώδικα:

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

Εδώ:

  • defined('BASEPATH') Ή exit('Δεν επιτρέπεται η άμεση πρόσβαση σε script'); αποτρέπει την άμεση πρόσβαση στον ελεγκτή εάν το αίτημα δεν προήλθε μέσω του index.php. Αυτό γίνεται για λόγους ασφαλείας.
  • Η κλάση Welcome επεκτείνει την CI_Controller {…} ορίζει την κλάση ελεγκτή Welcome και επεκτείνει την γονική κλάση CI_Controller.
  • public function index(){…} ορίζει τη μέθοδο ευρετηρίου που ανταποκρίνεται στο URL http://localhost:3000.
  • $this->load->view('welcome_message'); φορτώνει την προβολή welcome_message που βρίσκεται στον κατάλογο application/views.

Θα ενημερώσουμε τώρα τη μέθοδο ευρετηρίου ως εξής:

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

Εδώ:

  • $this->load->model('customers_model'); φορτώνει το μοντέλο πελατών.
  • $data['customer'] = $this->customers_model->get_customer(3); καλεί τη μέθοδο get_customer της customers_model και μεταβιβάζει την παράμετρο 3. Σε αυτό το παράδειγμα έχουμε κωδικοποιήσει την τιμή, αλλά σε πραγματικές εφαρμογές αυτή θα ήταν μια παράμετρος από το URI.
  • $this->load->view('welcome_message',$data); φορτώνει την προβολή welcome_message και την μεταβιβάζει στη μεταβλητή $data.

CodeΜοντέλο αναφλεκτήρα

Ας δημιουργήσουμε τώρα το μοντέλο που αναφέρεται στον παραπάνω κώδικα. Για λόγους απλότητας, το μοντέλο μας δεν θα αλληλεπιδράσει με το βάσεις δεδομένων αλλά θα επιστρέψει μια στατική εγγραφή πελάτη. Θα εργαστούμε με βάσεις δεδομένων στα επόμενα σεμινάρια. Δημιουργήστε ένα αρχείο Customers_model.php στο application/models και προσθέστε τον ακόλουθο κώδικα:

<?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;
}
}

Εδώ:

  • class Customers_model extends CI_Model {…} ορίζει το μοντέλο Customers_model που επεκτείνει το CI_Model.
  • Η public function get_customer($id) {…} ορίζει τη μέθοδο get_customer με βάση ένα αναγνωριστικό πελάτη.
  • Η $data[…] ορίζει τις στατικές τιμές του φανταστικού πελάτη μας. Αυτή θα πρέπει να είναι μια γραμμή που επιστρέφεται από τη βάση δεδομένων.
  • επιστροφή $δεδομένων. επιστρέφει τα δεδομένα του πελάτη.

Αυτό είναι όλο για το μοντέλο μας. Ας τροποποιήσουμε τώρα την προβολή welcome_message. Ανοίξτε το welcome_message.php που βρίσκεται στη διεύθυνση:

application/views/welcome_message.php

Αντικαταστήστε τον κώδικα με τον ακόλουθο:

<!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>

Αποθηκεύστε τις αλλαγές και φορτώστε τα παρακάτω URL στο πρόγραμμα περιήγησης ιστού: http://localhost:3000/Θα πρέπει να δείτε την κάρτα πελάτη όπως φαίνεται στην παρακάτω εικόνα.

Κάρτα στοιχείων πελάτη που παρέχεται από CodeIgniter

Συχνές Ερωτήσεις

Σημαίνει ότι η επιχειρηματική λογική υπάρχει στο μοντέλο, ας πούμε...ping Ο ελεγκτής είναι λεπτός και εστιάζει στα αιτήματα δρομολόγησης. Αυτό καθιστά τη λογική επαναχρησιμοποιήσιμη και τον ελεγκτή πιο εύκολο στην ανάγνωση και τον έλεγχο.

Μια προβολή θα πρέπει να παρουσιάζει μόνο δεδομένα. Διατηρήστεping Η λογική διαχωρίζει τις ανησυχίες, έτσι ώστε οι σχεδιαστές να μπορούν να επεξεργαστούν τη διάταξη χωρίς να αγγίξουν τους επιχειρηματικούς κανόνες και τα ίδια δεδομένα να μπορούν να εμφανίζονται σε διαφορετικές προβολές.

Το Active Record είναι ένα ενσωματωμένο εργαλείο δημιουργίας ερωτημάτων που επιτρέπει στα μοντέλα να διαβάζουν και να γράφουν στη βάση δεδομένων με κλήσεις μεθόδων αντί για ακατέργαστη SQL. Βοηθά επίσης στην αποτροπή της εισαγωγής SQL από το esca.ping αξιών.

Η Τεχνητή Νοημοσύνη μπορεί να δημιουργήσει αντίστοιχα αρχεία ελεγκτή, μοντέλου και προβολής από μια περιγραφή μιας λειτουργίας και να διατηρήσει τη συνεπή ονομασία. RevΕλέγξτε τα δημιουργημένα ερωτήματα και την επικύρωση πριν τα εκτελέσετε.

Η ετικέτα short echo είναι ένας συμπαγής τρόπος για να εκτυπώσετε μια τιμή σε μια προβολή. Το πλήρες μπλοκ ετικέτας php χρησιμοποιείται για δηλώσεις και δομές ελέγχου. Και τα δύο είναι ισοδύναμα για την έξοδο, αλλά οι ετικέτες short διατηρούν τις προβολές τακτοποιημένες.

Συνοψίστε αυτήν την ανάρτηση με: