PHP MVC Çerçeve Eğitimi
⚡ Akıllı Özet
PHP MVC çerçevesinin tasarımı, Modeller, Görünümler ve Denetleyiciler kullanarak uygulama verilerini ve iş mantığını sunumdan ayırır. CodeIgniter bu modeli pratik hale getirerek PHP geliştiricilerinin güvenli, bakımı kolay web uygulamalarını daha hızlı oluşturmalarını sağlıyor.
PHP MVC çerçevesi nedir?
PHP MVC, uygulama verilerini ve iş mantığını (model) sunumdan (görünüm) ayıran bir uygulama tasarım modelidir. MVC, Model, Görünüm ve Denetleyici anlamına gelir.
Denetleyici modeller ve görünümler arasında aracılık eder.
MVC tasarım modelini bir araba ve sürücü olarak düşünün.
Araçta, sürücünün (kontrolörün) öndeki trafiği izlemek ve gördüklerine bağlı olarak hızlanmak veya fren yapmak (hareket etmek) için kullandığı ön camlar (görüş) bulunur.
Şimdi de bu modele dayalı bir çerçevenin neden kullanılmaya değer olduğunu görelim.
Neden PHP MVC Çerçevesini kullanmalısınız?
PHP MVC çerçeveleri, karmaşık teknolojilerle çalışmayı şu şekilde basitleştirir:
- Tüm karmaşık uygulama ayrıntılarını gizleme
- Uygulamalarımızı oluşturmak için kullanabileceğimiz standart yöntemler sağlamak.
- Veritabanına bağlanma ve kullanıcı girdisini temizleme gibi faaliyetlerin temel uygulamalarının kısmen zaten hayata geçirilmiş olması nedeniyle geliştirici verimliliği artmaktadır.
- Profesyonel kodlama standartlarına uyulmasını teşvik etmek
PHP MVC Tasarım Deseni
Şimdi MVC tasarım modelinin her bir bileşenini kısaca tartışalım.
Model – bu bölüm iş mantığı ve uygulama verileriyle ilgilidir. Veri doğrulamaları gerçekleştirmek, verileri işlemek ve saklamak için kullanılabilir. Veriler nereden gelebilir;
- düz bir dosya
- veritabanı
- XML belgesi
- Diğer geçerli veri kaynakları.
kontrolör – Bu kısım, kullanıcının sunucudan kaynak talepleriyle ilgilenir.
Örneğin, kullanıcı talep ettiğinde URL …/index.php?products=listDenetleyici, ürün verilerini almak için ürün modelini yükleyecek ve ardından sonuçları liste görünümünde gösterecektir.
Özetle denetleyici, talep edilen kaynaklara bağlı olarak modelleri ve görünümleri birbirine bağlar.
Görünümler – Bu bölüm, verilerin kullanıcıya sunulmasıyla ilgilidir. Bu genellikle HTML sayfaları şeklinde olur.
PHP MVC çerçevesinin türleri
En iyi PHP çerçevesini seçmek zorlu bir iştir.
MVC'nin avantajlarından yararlanmak için kendi çerçevenizi yazmanıza gerek yok.
MVC çerçevelerinin nasıl çalıştığını anlamak için yalnızca MVC ile ilgili kendi uygulama tasarımınızı oluşturmaya çalışmalısınız.
MVC çerçevelerinin çalışma biçiminden memnun olduğunuzda, olgun ve zaten test edilmiş çerçevelere geçmelisiniz.
Aşağıdaki tabloda, popüler PHP framework'lerinden bazıları ve her bir framework'ün sunduğu özellikler kısaca açıklanmaktadır.
| iskelet | Açıklama |
|---|---|
|
|
En popüler PHP MVC çerçevelerinden biridir ve şu anda dördüncü büyük sürümündedir.CodeIgniter 4). Hafif ve kısa bir öğrenme eğrisine sahip. Web siteleri ve uygulamaları hızla oluşturmaya yardımcı olan zengin bir kütüphane seti içeriyor. Nesne yönelimli programlama konusunda sınırlı bilgiye sahip kullanıcılar da kullanabilir. ile oluşturulan uygulamalar CodeAteşleyici şunları içerir:
|
|
Bu, hiyerarşik bir Model Görünüm Denetleyicisi (HMVC) tabanlı, güvenli ve hafif bir çerçevedir. Not: Kohana'nın resmi olarak geliştirilmesi 2017'de durduruldu; son kararlı sürümü 3.3.6'ydı (Temmuz 2016). Topluluk tarafından geliştirilen Koseven, kod tabanını devam ettirdi. Kohana'yı kullanan şirketler şunlardır: |
|
Ruby on Rails'ten esinlenilmiştir ve aktif olarak bakımı yapılmaktadır (5.x sürümü). Yazılım tasarım kalıpları, yapılandırma yerine kurala dayalı yaklaşım, ActiveRecord gibi kavramlarıyla bilinir. CakePHP'nin destekli uygulamalar şunları içerir; |
|
|
Bu güçlü bir çerçevedir;
Geliştirme için idealdir.ping İş uygulamaları. 2020 yılında Zend Framework, açık kaynaklı Laminas Projesine geçiş yaptı. Zend/Laminas destekli uygulamalar şunlardır:
Zend framework'ünü kullanan şirketler arasında şunlar yer almaktadır:
|
PHP MVC Çerçevesi ile Sade PHP Arasındaki Temel Farklar
Bir framework pratikte neyi değiştirir? Düz PHP size tam özgürlük sağlar, ancak her proje yönlendirme, doğrulama ve veritabanı erişimini sıfırdan yeniden icat etmeyi gerektirir. Bir PHP MVC framework'ü bu tekrarlayan görevleri standartlaştırır, böylece kodunuz projeler ve ekipler arasında tutarlı kalır.
| Görünüş | Düz PHP | PHP MVC Çerçevesi |
|---|---|---|
| Code kuruluşlar | Tek bir dosyada HTML, SQL ve mantık kodunun birleşimi | Modeller, görünümler ve denetleyiciler olarak ayrılmıştır. |
| Veritabanı erişimi | Her sayfada el yazısıyla yazılmış sorular | Dahili sorgu oluşturucu veya parametre bağlama özelliğine sahip ORM |
| Güvenlik | Geliştirici her türlü güvenlik önlemini hatırlamalıdır. | Giriş filtreleme, XSS ve CSRF koruması dahildir. |
| Bakım | Değişiklikler dosyalarda öngörülemeyen bir şekilde yayılır. | Her katman bağımsız olarak değişebilir. |
👍 Bahşiş: Öncelikle aşağıdaki anket örneğinde olduğu gibi küçük, sade bir PHP projesi oluşturun; karma kodlu projelerin yarattığı zorluklar, MVC ayrımının değerini açıkça ortaya koymaktadır.
Kamuoyu yoklama uygulamasının taşınması Codeateşleyici
Bu öğreticiBurada, bir PHP anket uygulaması oluşturduk. Bu kodu yeni bir uygulamaya taşıyacağız. Codeateşleyici
- İndir son versiyonu CodeAteşleyici https://serdartavaslioglu.com sitesi üzerinden ücretsiz erişebilirseniz.
- ExtracSıkıştırılmış dosyanın içeriğini web sunucunuzun dizinindeki geliştirme klasörüne kopyalayın. Bu derste klasör adı olarak ciopinionpoll'u kullanacağız.
- Şuraya göz atın: URL http://localhost/ciopinionpoll/
MKS CodeYukarıdaki Igniter karşılama sayfası, çerçevenin doğru şekilde kurulduğunu doğruluyor. Şimdi anket uygulamamızı taşımaya başlayacağız. CodeAteşleyici. Uygulamamızın üç ana bileşene ayrıldığını hatırlayın; bunlar;
- Ön kontrol ünitesi – bu, gelen sinyallere yanıt veren parçadır. URL İstekleri alır ve istenen sayfayı döndürür. Bu kod denetleyiciye (controller) eklenecektir.
- Model – bu, veri isteklerine yanıt veren ve istenen veriyi döndüren koddur. Bu kod modelin içine yerleştirilecektir.
- Görünümler – bu, verilerin biçimlendirilmesinden ve görüntülenmesinden sorumlu koddur. Bu kod görünüme gidecek
Veritabanı yapılandırma ayarları
Veritabanı bağlantısını yapılandırmak için:
- ciopinionpoll klasörüne göz atın.
- Açın DatabaseFunctions.php Dosya, application/config dizininde yer almaktadır.
- Aşağıdaki kod satırlarını bulun
- Kullanıcı adını root olarak ayarlayın
- Parolayı localhost root parolanızla aynı olacak şekilde ayarlayın.
- Veritabanı adını opinion_poll olarak ayarlayın. Önceki derste oluşturulan veritabanını kullanacağımızı unutmayın.
- Değişiklikleri kaydedin ve dosyayı kapatın.
Modelimizi Oluşturmak
Şimdi CI_Model'i genişletecek olan modelimizi oluşturacağız. CI_Model, CodeIgniter kütüphaneleri. Model, application/models klasöründe yer alacaktır. idea_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);
}
}
?>
İŞTE,
- “class Opinion_poll_model, CI_Model'i genişletiyor…”, CI_Model'i genişleten modelimizdir
- “parent::__construct();” ifadesi CI_Model yapıcı fonksiyonunu çağırır.
- “$this->load->database();” uygulamamızın veritabanıyla etkileşim kurabilmesi için veritabanı kitaplığını yükler
- “$this->db->” CodeIgniter'ın aktif geçmişi. Bunu kontrol edin. Link Aktif kayıt hakkında daha fazla bilgi için.
Kontrol Cihazımızı Oluşturma
Şimdi denetleyiciyi oluşturalım. Varsayılanı kullanacağız. Codeapplication/controllers/welcome.php dosyasında bulunan Igniter denetleyicisinin kaynak kodunu aşağıdaki kodla değiştirin.
<?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 */
?>
İŞTE,
- “if (!tanımlanmış('BASEPATH')) çıkış('Doğrudan komut dosyası erişimine izin verilmiyor');” kullanıcıların denetleyici sınıfına doğrudan erişmemesini sağlar
- “sınıf Hoş Geldiniz CI_Controller'ı genişletiyor…” denetleyicimiz CI_Controller sınıfını genişletiyor
- “public function __construct()” fonksiyonu, CI_Controller sınıfının kurucu metodunu çağırır ve Opinion_poll_model modelimizi yükler.
- “public function index()…” ifadesi, index.php dosyasına yönlendirme yapan fonksiyondur. Bu fonksiyon, CodeIgniter'ın input sınıfı, bir oy verilip verilmediğini kontrol etmek, veritabanına eklemek ve ardından sonuçları görüntülemek için kullanılır. Input sınıfının post dizisi boşsa, oylama sayfası yüklenir.
- “$this->input->post('…')” şudur: Code$_POST global değişkeninin içeriğini alan Igniter giriş sınıfı.
- “$this->opinion_poll_model->add_vote($this->input->post('vote'))”, oyu veritabanına eklemek için modelin add_vote yöntemini çağırır.
Görüşlerimizi Oluşturmak
Önceki örnekte, biri oylama diğeri sonuçlar için olmak üzere iki HTML sayfamız olduğunu hatırlayın. Görünümlerimizi oluşturmak için aynı HTML kodunu minimal değişikliklerle kullanacağız. application/views dizininde aşağıdaki dosyaları oluşturun.
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>
Şimdi results.php sonuç sayfasını oluşturalım
<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>
Uygulamamızı test etme
Uygulamanızın kök dizininin ciopinionpoll olduğunu varsayarak, şu konuma gidin: http://localhost/ciopinionpoll/
Yukarıdaki oylama sayfası opinion_poll_form görünümümüzden alınmıştır. Herhangi bir seçenek belirlemeden Tamam'a tıklarsanız aşağıdaki uyarı mesajını göreceksiniz.
En sevdiğiniz kütüphaneye oy verin, ardından Tamam'a tıklayın. Aşağıdaki sonuç sayfasını göreceksiniz.
Bu, üç katmanın birlikte çalıştığını doğrular: denetleyici oyları aldı, model bunları depoladı ve saydı, görünüm ise toplamları gösterdi.









