Εκμάθηση PHP MVC Framework

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

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

  • 🧩 Πρότυπο: Το MVC χωρίζει μια εφαρμογή σε Μοντέλο (δεδομένα), Προβολή (παρουσίαση) και Ελεγκτή (χειρισμός αιτημάτων) για καθαρότερο κώδικα.
  • 🚀 Παραγωγικότητα: Τα πλαίσια διαθέτουν προκατασκευασμένες βιβλιοθήκες για πρόσβαση σε βάσεις δεδομένων, επικύρωση και εξυγίανση δεδομένων εισόδου, ώστε οι ομάδες να παρέχουν λειτουργίες πιο γρήγορα.
  • Επιλογές: CodeΤα Igniter, CakePHP και Laminas (πρώην Zend) παραμένουν ενεργές επιλογές, ενώ η Kohana διακόπηκε το 2017.
  • 🗄️ Μοντέλο: In CodeΤο Igniter, τα μοντέλα επεκτείνουν το CI_Model και χρησιμοποιούν μεθόδους Query Builder για ασφαλείς λειτουργίες βάσης δεδομένων.
  • 🎮 Ελεγκτής: Οι ελεγκτές επεκτείνουν το CI_Controller, διαβάζουν την είσοδο του χρήστη μέσω της κλάσης εισόδου και φορτώνουν τη σωστή προβολή.
  • 📈 Επίπτωση: Η μεταφορά μιας απλής εφαρμογής ψηφοφορίας PHP δείχνει πώς η δομή MVC μειώνει την επικάλυψη και απλοποιεί τη μακροπρόθεσμη συντήρηση.

Πλαίσιο PHP MVC

Τι είναι το πλαίσιο 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.

Πλαίσιο Περιγραφή

CodeIgniter


CodeIgniter


https://codeigniter.com/

Είναι ένα από τα πιο δημοφιλή πλαίσια PHP MVC, τώρα στην τέταρτη κύρια έκδοσή του (CodeIgniter 4). Είναι ελαφρύ και έχει σύντομη καμπύλη εκμάθησης. Διαθέτει ένα πλούσιο σύνολο βιβλιοθηκών που βοηθούν στην γρήγορη δημιουργία ιστοσελίδων και εφαρμογών. Χρήστες με περιορισμένες γνώσεις προγραμματισμού OOP μπορούν επίσης να το χρησιμοποιήσουν. Εφαρμογές που έχουν κατασκευαστεί με CodeΑνάφλεξη περιλαμβάνει:

  • https://www.pyrocms.com/ (πρώιμες εκδόσεις· το PyroCMS αργότερα μεταφέρθηκε στο Laravel)

Κοχάνα


Κοχάνα


http://kohanaframework.org

Είναι ένα ασφαλές και ελαφρύ πλαίσιο ιεραρχικού ελεγκτή προβολής μοντέλου (HMVC). Σημείωση: Η Kohana διακόπηκε επίσημα το 2017. Η τελευταία σταθερή έκδοση ήταν η 3.3.6 (Ιούλιος 2016). Το community fork Koseven συνέχισε τον κώδικα. Οι εταιρείες που χρησιμοποίησαν το Kohana περιλαμβάνουν:


CakePHP


CakePHP


www.cakephp.org

Έχει μοντελοποιηθεί σύμφωνα με το Ruby on Rails και παραμένει ενεργά συντηρούμενο (έκδοση 5.x). Είναι γνωστό για έννοιες όπως τα πρότυπα σχεδίασης λογισμικού, η σύμβαση πάνω από τη διαμόρφωση, το ActiveRecord κ.λπ. CakePHP Οι τροφοδοτούμενες εφαρμογές περιλαμβάνουν


Zend

https://getlaminas.org/


Ζεντ (τώρα Λάμινας)

Είναι ένα ισχυρό πλαίσιο που είναι?

  • Ασφαλές, αξιόπιστο, γρήγορο και επεκτάσιμο
  • Υποστηρίζει τη δημιουργία διαδικτυακών υπηρεσιών και API.

Είναι ιδανικό για ανάπτυξηping επιχειρηματικές εφαρμογές. Το 2020, το Zend Framework μεταπήδησε στο έργο ανοιχτού κώδικα Laminas. Οι εφαρμογές που υποστηρίζονται από Zend/Laminas περιλαμβάνουν:

  • Pimcore CMS,
  • DotKernel.

Οι εταιρείες που έχουν χρησιμοποιήσει το πλαίσιο Zend περιλαμβάνουν:

  • BBC
  • Cisco
  • Webex
  • Προσφορές.com

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/

CodeΗ σελίδα υποδοχής του Igniter εμφανίζεται μετά το extracδιαμόρφωση του πλαισίου

The CodeΗ σελίδα υποδοχής του Igniter παραπάνω επιβεβαιώνει ότι το πλαίσιο εργασίας έχει εγκατασταθεί σωστά. Τώρα θα μεταφέρουμε την εφαρμογή δημοσκόπησης γνώμης μας στο CodeIgniter. Υπενθυμίζουμε ότι η εφαρμογή μας χωρίστηκε σε τρία κύρια στοιχεία, δηλαδή:

  • Μπροστινό χειριστήριο – αυτό είναι το μέρος που ανταποκρίνεται σε URL ζητά και επιστρέφει την ζητούμενη σελίδα. Αυτός ο κώδικας θα εισαχθεί στον ελεγκτή
  • Μοντέλο – αυτός είναι ο κώδικας που απαντά σε αιτήματα δεδομένων και επιστρέφει τα ζητούμενα δεδομένα. Αυτός ο κώδικας θα εισαχθεί στο μοντέλο
  • Προβολές – αυτός είναι ο κώδικας που είναι υπεύθυνος για τη μορφοποίηση και την εμφάνιση των δεδομένων. Αυτός ο κωδικός θα μπει στην προβολή

Ρυθμίσεις διαμόρφωσης βάσης δεδομένων

Για να ρυθμίσετε τη σύνδεση βάσης δεδομένων:

  • Περιηγηθείτε στον φάκελο ciopinionpoll
  • Ανοίξτε το βάση δεδομένων.php αρχείο που βρίσκεται στον κατάλογο application/config.
  • Εντοπίστε τις ακόλουθες γραμμές κώδικα

Ρυθμίσεις διαμόρφωσης βάσης δεδομένων σε CodeΑρχείο database.php του Igniter

  • Ορίστε το όνομα χρήστη σε 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/

Φόρμα ψηφοφορίας για δημοσκόπηση που παρέχεται από CodeΕφαρμογή ανάφλεξης

Η παραπάνω σελίδα ψηφοφορίας προέρχεται από την προβολή opinion_poll_form. Κάντε κλικ στο OK χωρίς να επιλέξετε κάποια επιλογή και θα δείτε το ακόλουθο μήνυμα ειδοποίησης.

Μήνυμα ειδοποίησης επικύρωσης που εμφανίζεται όταν δεν έχει επιλεγεί ψήφος

Ψηφίστε την αγαπημένη σας βιβλιοθήκη και, στη συνέχεια, κάντε κλικ στο OK. Θα δείτε την ακόλουθη σελίδα αποτελεσμάτων

Σελίδα αποτελεσμάτων δημοσκόπησης που δείχνει τον αριθμό των ψήφων ανά JavaΒιβλιοθήκη σεναρίων

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

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

Το HMVC (Hierarchical Model View Controller) οργανώνει μια εφαρμογή σε ανεξάρτητες τριάδες MVC που μπορούν να καλούν η μία την άλλη. Πλαίσια όπως Κοχάνα έκανε δημοφιλές το HMVC επειδή βοηθά στην αρθρωτή διαμόρφωση μεγάλων εφαρμογών.

Ναί. Laravel είναι αυτήν τη στιγμή το πιο δημοφιλές πλαίσιο PHP MVC. Ακολουθεί τον ίδιο διαχωρισμό Model-View-Controller που περιγράφεται εδώ, προσθέτοντας εργαλεία όπως τα πρότυπα Eloquent ORM και Blade.

Ναί. Εργαλεία όπως GitHub Copilot μπορεί να δημιουργήσει μοντέλα scaffold, ελεγκτές και προβολές από prompts. Θα πρέπει να ελέγξετε τον δημιουργημένο κώδικα για ζητήματα ασφαλείας, όπως η έξοδος χωρίς διαφυγή και η ένεση SQL.

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

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

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