Εκμάθηση PHP MVC Framework
⚡ Έξυπνη Σύνοψη
Ο σχεδιασμός του PHP MVC Framework διαχωρίζει τα δεδομένα εφαρμογών και την επιχειρηματική λογική από την παρουσίαση, χρησιμοποιώντας Μοντέλα, Προβολές και Ελεγκτές. CodeΤο Igniter κάνει αυτό το μοτίβο πρακτικό, επιτρέποντας στους προγραμματιστές PHP να δημιουργούν ασφαλείς και συντηρήσιμες εφαρμογές ιστού πιο γρήγορα.
Τι είναι το πλαίσιο PHP MVC;
Το PHP MVC είναι ένα μοτίβο σχεδίασης εφαρμογής που διαχωρίζει τα δεδομένα της εφαρμογής και τη λογική της επιχείρησης (μοντέλο) από την παρουσίαση (προβολή). Το MVC σημαίνει Model, View & Controller.
Ο ελεγκτής μεσολαβεί μεταξύ των μοντέλων και των προβολών.
Σκεφτείτε το σχέδιο σχεδίασης MVC ως αυτοκίνητο και οδηγός.
Το αυτοκίνητο διαθέτει παρμπρίζ (προβολή) τις οποίες χρησιμοποιεί ο οδηγός (ελεγκτής) για να παρακολουθεί την κυκλοφορία μπροστά και στη συνέχεια να επιταχύνει ή να φρενάρει (μοντέλο) ανάλογα με το τι βλέπει μπροστά.
Στη συνέχεια, ας δούμε γιατί αξίζει να χρησιμοποιήσουμε ένα πλαίσιο που βασίζεται σε αυτό το μοτίβο.
Γιατί να χρησιμοποιήσετε το PHP MVC Framework;
Τα πλαίσια PHP MVC απλοποιούν την εργασία με πολύπλοκες τεχνολογίες ως εξής:
- Απόκρυψη όλων των πολύπλοκων λεπτομερειών υλοποίησης
- Παροχή τυποποιημένων μεθόδων που μπορούμε να χρησιμοποιήσουμε για την κατασκευή των εφαρμογών μας
- Αύξηση της παραγωγικότητας των προγραμματιστών, επειδή οι βασικές υλοποιήσεις δραστηριοτήτων όπως η σύνδεση με τη βάση δεδομένων και η απολύμανση των δεδομένων εισόδου των χρηστών έχουν ήδη εν μέρει υλοποιηθεί.
- Ενθάρρυνση της τήρησης των επαγγελματικών προτύπων κωδικοποίησης
Μοτίβο σχεδίασης PHP MVC
Ας συζητήσουμε τώρα εν συντομία κάθε στοιχείο του σχεδίου σχεδίασης MVC.
Μοντέλο – αυτό το μέρος αφορά την επιχειρηματική λογική και τα δεδομένα της εφαρμογής. Μπορεί να χρησιμοποιηθεί για την εκτέλεση επικυρώσεων δεδομένων, την επεξεργασία δεδομένων και την αποθήκευση τους. Τα δεδομένα μπορούν να προέρχονται από?
- επίπεδο αρχείο
- βάσεις δεδομένων
- Έγγραφο XML
- Άλλες έγκυρες πηγές δεδομένων.
ελεγκτής – αυτό είναι το μέρος που ασχολείται με τα αιτήματα του χρήστη για πόρους από τον διακομιστή.
Για παράδειγμα, όταν ο χρήστης ζητά το URL …/index.php?products=list, ο ελεγκτής θα φορτώσει το μοντέλο προϊόντων για να ανακτήσει τα δεδομένα προϊόντων και, στη συνέχεια, θα εμφανίσει τα αποτελέσματα στην προβολή λίστας.
Με λίγα λόγια, ο ελεγκτής συνδέει τα μοντέλα και τις προβολές μεταξύ τους ανάλογα με τους απαιτούμενους πόρους.
Προβολές – αυτό το μέρος ασχολείται με την παρουσίαση των δεδομένων στον χρήστη. Αυτό συνήθως γίνεται με τη μορφή σελίδων HTML.
Τύποι πλαισίου PHP MVC
Η επιλογή του καλύτερου πλαισίου PHP είναι μια πρόκληση.
Δεν χρειάζεται να γράψετε το δικό σας πλαίσιο για να επωφεληθείτε από τα πλεονεκτήματα του MVC.
Θα πρέπει μόνο να προσπαθήσετε να δημιουργήσετε το δικό σας σχέδιο εφαρμογής που σχετίζεται με το MVC για να κατανοήσετε πώς λειτουργούν τα πλαίσια MVC.
Μόλις αισθανθείτε άνετα με τον τρόπο που λειτουργούν τα πλαίσια MVC, θα πρέπει να προχωρήσετε στα ώριμα και ήδη δοκιμασμένα πλαίσια.
Ο παρακάτω πίνακας περιγράφει συνοπτικά μερικά από τα δημοφιλή frameworks PHP και τις δυνατότητες που προσφέρει κάθε framework.
| Πλαίσιο | Περιγραφή |
|---|---|
|
|
Είναι ένα από τα πιο δημοφιλή πλαίσια PHP MVC, τώρα στην τέταρτη κύρια έκδοσή του (CodeIgniter 4). Είναι ελαφρύ και έχει σύντομη καμπύλη εκμάθησης. Διαθέτει ένα πλούσιο σύνολο βιβλιοθηκών που βοηθούν στην γρήγορη δημιουργία ιστοσελίδων και εφαρμογών. Χρήστες με περιορισμένες γνώσεις προγραμματισμού OOP μπορούν επίσης να το χρησιμοποιήσουν. Εφαρμογές που έχουν κατασκευαστεί με CodeΑνάφλεξη περιλαμβάνει:
|
|
Είναι ένα ασφαλές και ελαφρύ πλαίσιο ιεραρχικού ελεγκτή προβολής μοντέλου (HMVC). Σημείωση: Η Kohana διακόπηκε επίσημα το 2017. Η τελευταία σταθερή έκδοση ήταν η 3.3.6 (Ιούλιος 2016). Το community fork Koseven συνέχισε τον κώδικα. Οι εταιρείες που χρησιμοποίησαν το Kohana περιλαμβάνουν: |
|
Έχει μοντελοποιηθεί σύμφωνα με το Ruby on Rails και παραμένει ενεργά συντηρούμενο (έκδοση 5.x). Είναι γνωστό για έννοιες όπως τα πρότυπα σχεδίασης λογισμικού, η σύμβαση πάνω από τη διαμόρφωση, το ActiveRecord κ.λπ. CakePHP Οι τροφοδοτούμενες εφαρμογές περιλαμβάνουν |
|
|
Είναι ένα ισχυρό πλαίσιο που είναι?
Είναι ιδανικό για ανάπτυξηping επιχειρηματικές εφαρμογές. Το 2020, το Zend Framework μεταπήδησε στο έργο ανοιχτού κώδικα Laminas. Οι εφαρμογές που υποστηρίζονται από Zend/Laminas περιλαμβάνουν:
Οι εταιρείες που έχουν χρησιμοποιήσει το πλαίσιο Zend περιλαμβάνουν:
|
PHP MVC Framework vs Απλή PHP: Βασικές Διαφορές
Τι αλλάζει στην πράξη ένα framework; Η απλή PHP σας δίνει πλήρη ελευθερία, αλλά κάθε έργο καταλήγει να επανεφευρίσκει τη δρομολόγηση, την επικύρωση και την πρόσβαση σε βάσεις δεδομένων από την αρχή. Ένα framework MVC PHP τυποποιεί αυτές τις επαναλαμβανόμενες εργασίες, έτσι ώστε ο κώδικάς σας να παραμένει συνεπής σε όλα τα έργα και τις ομάδες.
| Άποψη | Απλή PHP | Πλαίσιο PHP MVC |
|---|---|---|
| Code επιχειρήσεις | Μικτή HTML, SQL και λογική σε μεμονωμένα αρχεία | Χωρίζεται σε μοντέλα, προβολές και ελεγκτές |
| Πρόσβαση στη βάση δεδομένων | Χειρόγραφα ερωτήματα σε κάθε σελίδα | Ενσωματωμένο εργαλείο δημιουργίας ερωτημάτων ή ORM με σύνδεση παραμέτρων |
| Ασφάλεια | Ο προγραμματιστής πρέπει να θυμάται κάθε μέτρο ασφαλείας | Περιλαμβάνονται φιλτράρισμα εισόδου, προστασία XSS και CSRF |
| Συντήρηση | Οι αλλαγές διαπερνούν απρόβλεπτα τα αρχεία | Κάθε στρώση μπορεί να αλλάξει ανεξάρτητα |
💡 Συμβουλή: Δημιουργήστε πρώτα ένα μικρό, απλό έργο PHP, όπως η δημοσκόπηση παρακάτω. Το πρόβλημα του μικτού κώδικα καθιστά προφανή την αξία του διαχωρισμού MVC.
Μεταφορά της εφαρμογής δημοσκόπησης σε CodeIgniter
Σε αυτή τη φροντιστήριο, δημιουργήσαμε μια εφαρμογή δημοσκόπησης PHP. Εδώ, θα μεταφέρουμε αυτόν τον κώδικα σε CodeIgniter
- Λήψη η τελευταία έκδοση του CodeΑνάφλεξη από το δικό τους ιστοσελίδα.
- ExtracΜεταφέρετε τα περιεχόμενα του συμπιεσμένου αρχείου στον κατάλογο ανάπτυξης στον κατάλογο του διακομιστή ιστού σας. Σε αυτό το μάθημα θα χρησιμοποιήσουμε το ciopinionpoll ως όνομα φακέλου.
- Περιηγηθείτε στο URL http://localhost/ciopinionpoll/
The CodeΗ σελίδα υποδοχής του Igniter παραπάνω επιβεβαιώνει ότι το πλαίσιο εργασίας έχει εγκατασταθεί σωστά. Τώρα θα μεταφέρουμε την εφαρμογή δημοσκόπησης γνώμης μας στο CodeIgniter. Υπενθυμίζουμε ότι η εφαρμογή μας χωρίστηκε σε τρία κύρια στοιχεία, δηλαδή:
- Μπροστινό χειριστήριο – αυτό είναι το μέρος που ανταποκρίνεται σε URL ζητά και επιστρέφει την ζητούμενη σελίδα. Αυτός ο κώδικας θα εισαχθεί στον ελεγκτή
- Μοντέλο – αυτός είναι ο κώδικας που απαντά σε αιτήματα δεδομένων και επιστρέφει τα ζητούμενα δεδομένα. Αυτός ο κώδικας θα εισαχθεί στο μοντέλο
- Προβολές – αυτός είναι ο κώδικας που είναι υπεύθυνος για τη μορφοποίηση και την εμφάνιση των δεδομένων. Αυτός ο κωδικός θα μπει στην προβολή
Ρυθμίσεις διαμόρφωσης βάσης δεδομένων
Για να ρυθμίσετε τη σύνδεση βάσης δεδομένων:
- Περιηγηθείτε στον φάκελο ciopinionpoll
- Ανοίξτε το βάση δεδομένων.php αρχείο που βρίσκεται στον κατάλογο application/config.
- Εντοπίστε τις ακόλουθες γραμμές κώδικα
- Ορίστε το όνομα χρήστη σε root
- Ορίστε τον κωδικό πρόσβασης στον κωδικό πρόσβασης root του localhost σας
- Ορίστε το όνομα της βάσης δεδομένων σε opinion_poll. Σημειώστε ότι θα χρησιμοποιήσουμε τη βάση δεδομένων που δημιουργήθηκε στο προηγούμενο μάθημα.
- Αποθηκεύστε τις αλλαγές και κλείστε το αρχείο.
Δημιουργώντας το μοντέλο μας
Στη συνέχεια, θα δημιουργήσουμε το μοντέλο μας που θα επεκτείνει το CI_Model. Το CI_Model είναι μέρος του CodeΒιβλιοθήκες ανάφλεξης. Το μοντέλο θα βρίσκεται στην εφαρμογή/μοντέλα opinion_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);
}
}
?>
ΕΔΩ,
- Το "class Opinion_poll_model extends CI_Model..." είναι το μοντέλο μας που επεκτείνει το CI_Model
- Η συνάρτηση “parent::__construct();” καλεί τον κατασκευαστή CI_Model
- "$this->load->database();" φορτώνει τη βιβλιοθήκη της βάσης δεδομένων έτσι ώστε η εφαρμογή μας να μπορεί να αλληλεπιδρά με τη βάση δεδομένων
- Το "$this->db->" είναι CodeΕνεργό αρχείο του Igniter. Ελέγξτε αυτό σύνδεσμος για περισσότερες πληροφορίες σχετικά με την ενεργή εγγραφή.
Δημιουργώντας τον Ελεγκτή μας
Ας δημιουργήσουμε τώρα τον ελεγκτή. Θα χρησιμοποιήσουμε τον προεπιλεγμένο CodeΟ ελεγκτής ανάφλεξης βρίσκεται στο application/controllers/welcome.php. Αντικαταστήστε τον πηγαίο κώδικά του με τον ακόλουθο κώδικα.
<?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 */
?>
ΕΔΩ,
- "if (!defined('BASEPATH')) exit ('Δεν επιτρέπεται η άμεση πρόσβαση σεναρίου');" διασφαλίζει ότι οι χρήστες δεν έχουν άμεση πρόσβαση στην κλάση ελεγκτή
- "class Welcome extends CI_Controller..." ο ελεγκτής μας επεκτείνει την κλάση CI_Controller
- Η «public function __construct()» καλεί τη μέθοδο κατασκευής κλάσης του CI_Controller και φορτώνει το μοντέλο Opinion_poll_model μας.
- Η «public function index()…» είναι η συνάρτηση που αντιστοιχίζεται στο index.php. Χρησιμοποιεί CodeΗ κλάση εισόδου του Igniter ελέγχει εάν έχει υποβληθεί μια ψήφος, την προσθέτει στη βάση δεδομένων και στη συνέχεια εμφανίζει τα αποτελέσματα. Εάν ο πίνακας ανάρτησης της κλάσης εισόδου είναι κενός, φορτώνει τη σελίδα ψηφοφορίας.
- Το "$this->input->post('…')" είναι το CodeΚλάση εισόδου Igniter που λαμβάνει τα περιεχόμενα της καθολικής μεταβλητής $_POST.
- Το "$this->opinion_poll_model->add_vote($this->input->post('vote'))" καλεί τη μέθοδο add_vote του μοντέλου για να προσθέσει την ψήφο στη βάση δεδομένων.
Δημιουργώντας τις απόψεις μας
Θυμηθείτε από το προηγούμενο παράδειγμα ότι είχαμε δύο σελίδες HTML, μία για ψηφοφορία και μία για αποτελέσματα. Θα χρησιμοποιήσουμε τον ίδιο κώδικα HTML με ελάχιστες τροποποιήσεις για να δημιουργήσουμε τις προβολές μας. Δημιουργήστε τα ακόλουθα αρχεία στον κατάλογο 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>
Ας δημιουργήσουμε τώρα τη σελίδα αποτελεσμάτων 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>
Δοκιμή της εφαρμογής μας
Υποθέτοντας ότι ο ριζικός κατάλογος της εφαρμογής σας είναι ciopinionpoll, μεταβείτε στο http://localhost/ciopinionpoll/
Η παραπάνω σελίδα ψηφοφορίας προέρχεται από την προβολή opinion_poll_form. Κάντε κλικ στο OK χωρίς να επιλέξετε κάποια επιλογή και θα δείτε το ακόλουθο μήνυμα ειδοποίησης.
Ψηφίστε την αγαπημένη σας βιβλιοθήκη και, στη συνέχεια, κάντε κλικ στο OK. Θα δείτε την ακόλουθη σελίδα αποτελεσμάτων
Αυτό επιβεβαιώνει ότι τα τρία επίπεδα συνεργάζονται: ο ελεγκτής έλαβε την ψήφο, το μοντέλο την αποθήκευσε και την μέτρησε και η προβολή εμφάνισε τα σύνολα.









