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

Τι είναι το MVC;
Το MVC σημαίνει Model-View-Controller. Είναι ένα αρχιτεκτονικό μοτίβο που χωρίζει την εφαρμογή σε τρία κύρια στοιχεία:
- Το μοντέλο ασχολείται με την επιχειρηματική λογική και τις αλληλεπιδράσεις με τις βάσεις δεδομένων.
- Ο ελεγκτής συντονίζει τις δραστηριότητες μεταξύ του μοντέλου και της προβολής.
- Η προβολή είναι υπεύθυνη για την παρουσίαση δεδομένων.
Τα ακόλουθα είναι μερικά από τα πλεονεκτήματα του αρχιτεκτονικού προτύπου 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.
Ένας ελεγκτής λαμβάνει το αίτημα από τον χρήστη, αλληλεπιδρά με το μοντέλο βάσης δεδομένων, εάν είναι απαραίτητο, και στη συνέχεια επιστρέφει το αποτέλεσμα στο πρόγραμμα περιήγησης με τη μορφή κώδικα 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/Θα πρέπει να δείτε την κάρτα πελάτη όπως φαίνεται στην παρακάτω εικόνα.


