Penjelasan terperinci model seni bina model-view-controller (MVC) dan contoh pelaksanaan PHP
mata teras
Model MVC pada asalnya dicadangkan pada akhir 1970 -an dan merupakan model seni bina perisian berdasarkan memisahkan paparan data dari kaedah berinteraksi dengan data. Secara teorinya, sistem MVC yang mantap harus membenarkan pemaju depan dan pemaju back-end untuk bekerja pada sistem yang sama tanpa mengganggu satu sama lain, berkongsi atau mengedit fail yang mana-mana pihak sedang diproses. Walaupun MVC pada asalnya direka untuk pengkomputeran peribadi, ia telah digunakan secara meluas oleh pemaju web kerana penekanannya terhadap pemisahan kebimbangan, dan secara tidak langsung, kod yang boleh digunakan semula. Model ini menggalakkan pembangunan sistem modular, yang membolehkan pemaju mengemas kini, menambah atau memadam ciri dengan cepat. Dalam artikel ini, saya akan memperkenalkan prinsip -prinsip asas MVC, memberikan gambaran keseluruhan definisi corak ini, dan dengan cepat memperkenalkan contoh MVC dalam PHP. Siaran ini pastinya untuk sesiapa sahaja yang tidak pernah menggunakan MVC untuk kod sebelum ini, atau mereka yang ingin mengkaji kemahiran pembangunan MVC sebelumnya.
Memahami MVC
Nama corak ini adalah gabungan tiga bahagian terasnya: model, pandangan, dan pengawal. Perwakilan visual corak MVC yang lengkap dan betul adalah seperti berikut:
Rajah ini menunjukkan susun atur aliran satu arah data, bagaimana data diluluskan antara komponen, dan bagaimana ia berfungsi antara komponen.
model (model)
Modelmerujuk kepada penyimpanan data tetap yang digunakan dalam reka bentuk keseluruhan. Ia mesti membenarkan akses kepada data untuk dilihat atau dikumpulkan dan ditulis dan merupakan jambatan antara komponen paparan dan komponen pengawal dalam mod MVC. Aspek penting dalam model adalah bahawa ia secara teknikal "buta" - maksud saya model tidak disambungkan atau difahami dengan apa yang berlaku selepas data diserahkan kepada komponen pandangan atau pengawal. Ia tidak memanggil atau mencari respons dari bahagian lain; Walau bagaimanapun, model ini tidak boleh digeneralisasikan sebagai pangkalan data, atau pintu masuk ke sistem lain yang memproses proses data. Model ini mesti bertindak sebagai penjaga pintu data, tidak meminta pertanyaan, tetapi menerima semua permintaan. Komponen model biasanya merupakan bahagian paling kompleks dari sistem MVC dan juga teras keseluruhan sistem, kerana tanpa itu, tidak ada kaitan antara pengawal dan pandangan.
Lihat (Lihat)
Pandanganadalah di mana data yang diminta dari model dan menentukan output terakhirnya. Secara tradisinya, dalam aplikasi web yang dibina menggunakan MVC, pandangan adalah bahagian sistem untuk menghasilkan dan memaparkan HTML. Pandangan juga akan mencetuskan tindak balas pengguna, dan pengguna akan terus berinteraksi dengan pengawal. Contoh asas ialah butang yang dihasilkan oleh pandangan bahawa pengguna mengklik dan mencetuskan tindakan dalam pengawal. Terdapat beberapa salah faham mengenai komponen pandangan, terutamanya pemaju web yang membina aplikasi mereka menggunakan corak MVC. Sebagai contoh, ramai orang tersilap percaya bahawa pandangan itu tidak mempunyai hubungan dengan model dan semua data yang dipaparkan oleh pandangan diluluskan dari pengawal. Malah, proses ini sepenuhnya mengabaikan teori di sebalik corak MVC. Artikel Fabio Cevasco "Rangka Kerja CakePHP: Percubaan Pertama Anda" menunjukkan pendekatan obfuscation ini kepada MVC dalam kerangka CakePHP, contoh banyak kerangka PHP MVC yang tidak tradisional:
"Harus diingat bahawa untuk menggunakan seni bina MVC dengan betul, tidak ada interaksi antara model dan pandangan: semua logik dikendalikan oleh pengawal"
Di samping itu, tidak tepat untuk menggambarkan pandangan sebagai fail templat. Walau bagaimanapun, seperti yang ditunjukkan oleh Tom Butler, ini bukan kesalahan seseorang, tetapi banyak kesilapan yang dibuat oleh banyak pemaju, yang membawa kepada pembelajaran MVC yang salah. Kemudian mereka terus mendidik orang lain dengan tidak betul. Pandangan sebenarnya lebih daripada satu templat, tetapi rangka kerja yang diilhamkan oleh MVC moden telah membuat pandangan yang tidak dikenali sehingga tidak ada yang benar-benar peduli sama ada kerangka itu benar-benar mengikuti corak MVC yang betul. Ia juga penting untuk diingat bahawa bahagian pandangan tidak pernah menerima data dari pengawal. Seperti yang saya nyatakan ketika membincangkan model, tanpa model pertengahan, tidak ada hubungan langsung antara pandangan dan pengawal.
pengawal (pengawal)
Komponen terakhir tiga adalah pengawal. Tugasnya adalah untuk memproses data yang dimasukkan atau dikemukakan oleh pengguna dan mengemas kini model dengan sewajarnya. Lifeline pengawal adalah pengguna; Ia adalah satu -satunya bahagian corak yang harus diintervasi oleh pengguna. Pengawal boleh hanya umum sebagai pemungut maklumat, yang kemudiannya diserahkan kepada model untuk organisasi penyimpanan, dan tidak mengandungi logik lain daripada logik yang diperlukan untuk mengumpul input. Pengawal juga disambungkan hanya kepada satu pandangan dan satu model, menjadikannya sistem aliran data sehala, dengan jabat tangan dan tandatangan di setiap titik pertukaran data. Adalah penting untuk diingat bahawa pengawal hanya akan mendapat arahan untuk melaksanakan tugas apabila pengguna pertama berinteraksi dengan pandangan, dan fungsi setiap pengawal dicetuskan oleh interaksi pengguna dengan pandangan. Kesilapan yang paling biasa yang dibuat oleh pemaju adalah untuk kesilapan pengawal untuk pintu masuk dan akhirnya menetapkan fungsi dan tanggungjawab yang harus diandaikan oleh pandangan (ini biasanya hasil pemaju yang sama hanya tersilap memandangkan komponen pandangan sebagai templat). Selain itu, kesilapan biasa adalah untuk menyediakan pengawal dengan fungsi yang bertanggungjawab untuk pemampatan, penghantaran dan pemprosesan data dari model ke pandangan sahaja, dan dalam mod MVC, hubungan ini harus disimpan di antara model dan pandangan.
mvc dalam php
Aplikasi Web PHP boleh ditulis menggunakan seni bina berasaskan MVC. Mari kita mulakan dengan contoh mudah:
<?php class Model { public $string; public function __construct() { $this->string = "MVC + PHP = Awesome!"; } }
<?php class View { private $model; private $controller; public function __construct($controller, $model) { $this->controller = $controller; $this->model = $model; } public function output() { return "<p>" . $this->model->string . "</p>"; } }
<?php class Controller { private $model; public function __construct($model) { $this->model = $model; } }
kami telah memulakan projek dengan beberapa kelas yang sangat asas untuk setiap bahagian skema. Sekarang kita perlu menetapkan hubungan antara mereka:
<?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); echo $view->output();
Seperti yang anda lihat dalam contoh di atas, kami tidak mempunyai ciri-ciri khusus pengawal kerana kami tidak menentukan sebarang interaksi pengguna untuk permohonan kami. Pandangan ini mengandungi semua fungsi, kerana contohnya semata -mata untuk tujuan paparan. Sekarang mari kita memperluaskan contoh untuk menunjukkan cara menambah fungsi kepada pengawal untuk menambah interaktiviti kepada aplikasi:
<?php class Model { public $string; public function __construct() { $this->string = "MVC + PHP = Awesome, click here!"; } public function updateString($newString) { $this->string = $newString; } }
<?php class View { private $model; private $controller; public function __construct($controller, $model) { $this->controller = $controller; $this->model = $model; } public function output() { return '<p><a href="https://www.php.cn/link/5ca1b0a18c411c3ebfc35c9dad7da921">' . $this->model->string . "</a></p>"; } }
<?php class Controller { private $model; public function __construct($model) { $this->model = $model; } public function clicked() { $this->model->updateString("Updated Data, thanks to MVC and PHP!"); } }
kami meningkatkan aplikasi dengan beberapa ciri asas. Sekarang tetapkan hubungan antara komponen seperti berikut:
<?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); if (isset($_GET['action']) && !empty($_GET['action'])) { $controller->{$_GET['action']}(); } echo $view->output();
Jalankan kod dan apabila anda mengklik pada pautan, anda akan dapat melihat rentetan menukar datanya.
Kesimpulan
kami telah memperkenalkan teori asas di sebalik corak MVC dan mencipta aplikasi MVC yang sangat asas, tetapi kami masih jauh untuk pergi sebelum kami masuk ke dalam ciri -ciri yang teliti. Dalam artikel seterusnya dalam siri ini, kami akan meliputi beberapa pilihan yang anda hadapi ketika cuba membuat aplikasi MVC sebenar di web PHP. Tinggal! Gambar dari Fotolia Komen dalam artikel ini telah ditutup. Adakah terdapat masalah dengan mod MVC dan PHP? Mengapa tidak mengemukakan soalan di forum kami?
Soalan Lazim untuk Mod PHP MVC (FAQ)
mod-view-controller (MVC) mod adalah corak reka bentuk yang membahagikan aplikasi ke dalam tiga komponen yang saling berkaitan. Pemisahan ini membolehkan pemaju mengubah atau mengemas kini satu komponen tanpa menjejaskan orang lain. Dalam PHP, corak MVC amat berguna kerana ia menganjurkan kod dan menjadikannya lebih mudah untuk mengekalkan dan skala. Ia juga boleh meningkatkan kecekapan pengurusan data dan reka bentuk antara muka pengguna.
Dalam PHP, mod MVC berfungsi dengan membahagikan aplikasi ke dalam tiga komponen. Model memproses data dan logik perniagaan, paparan menguruskan rendering antara muka dan data pengguna, dan pengawal memproses permintaan pengguna dan mengemas kini model dan melihat dengan sewajarnya. Pemisahan kebimbangan ini membolehkan pengurusan kod yang lebih cekap dan debugging yang lebih mudah.
Melaksanakan mod MVC dalam projek PHP melibatkan membuat fail atau kelas berasingan untuk model, pandangan, dan pengawal. Model ini akan mengandungi fungsi untuk mengakses dan memanipulasi data, paparan akan mengandungi kod HTML dan PHP untuk memaparkan data, dan pengawal akan mengandungi fungsi untuk memproses input pengguna dan mengemas kini model dan pandangan.
Terdapat beberapa kerangka PHP MVC yang popular yang dapat membantu anda melaksanakan corak MVC dalam projek anda. Ini termasuk Laravel, Symfony, Codeigniter dan CakePHP. Rangka kerja ini menyediakan cara berstruktur dan cekap untuk membina aplikasi web menggunakan corak MVC.
menggunakan rangka kerja PHP MVC memberikan banyak faedah. Ia menyediakan cara berstruktur untuk mengatur kod anda, menjadikannya lebih mudah untuk mengekalkan dan skala. Ia juga menyediakan fungsi terbina dalam dan perpustakaan untuk tugas-tugas biasa, mengurangkan jumlah kod yang perlu anda tulis. Di samping itu, rangka kerja MVC sering merangkumi ciri -ciri keselamatan yang melindungi aplikasi anda dari kelemahan web biasa.
Dalam PHP MVC, pengawal bertindak sebagai perantara antara model dan pandangan. Apabila pengguna membuat permintaan, pengawal menafsirkan permintaan dan memanggil fungsi model yang sepadan untuk memproses data. Ia kemudian mengemas kini pandangan untuk mencerminkan sebarang perubahan dalam data.
Dalam PHP MVC, input pengguna biasanya diproses oleh pengawal. Pengawal menerima input pengguna, mengesahkannya, dan menyampaikannya kepada model untuk diproses. Model itu kemudian mengemas kini data dan memberitahu pengawal, yang seterusnya mengemas kini paparan.
Dalam PHP MVC, data dipaparkan dalam paparan dengan menggunakan kod PHP dan HTML. Pengawal mengambil data dari model dan melewati pandangannya, dan paparan menghasilkan HTML untuk memaparkan data.
Dalam PHP MVC, data dalam model dikemas kini melalui fungsi yang dipanggil oleh pengawal. Fungsi ini boleh termasuk operasi seperti membuat, membaca, mengemaskini, dan memadam data.
Membuat aplikasi PHP MVC anda selamat melibatkan pelbagai langkah. Langkah-langkah ini termasuk mengesahkan dan membersihkan input pengguna, menggunakan pernyataan yang disediakan atau pertanyaan parameter untuk mencegah suntikan SQL, dan menggunakan ciri keselamatan terbina dalam rangka kerja MVC. Ia juga penting untuk memastikan rangka kerja anda dan sebarang kebergantungan terkini untuk mengelakkan kelemahan yang diketahui.
Atas ialah kandungan terperinci PHP Master | Corak MVC dan PHP, Bahagian 1. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!