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.

  • 🧩 Desen: MVC, daha temiz bir kod için uygulamayı Model (veri), Görünüm (sunum) ve Denetleyici (istek işleme) olmak üzere üç bölüme ayırır.
  • ???? Verimlilik: Çerçeveler, veritabanı erişimi, doğrulama ve girdi temizleme için önceden oluşturulmuş kütüphaneler sunar, böylece ekipler özellikleri daha hızlı bir şekilde sunabilir.
  • Seçenekler: CodeIgniter, CakePHP ve Laminas (eski adıyla Zend) aktif seçenekler olmaya devam ederken, Kohana 2017'de kullanımdan kaldırıldı.
  • 🗄️ Model: In CodeIgniter'da modeller CI_Model'i genişletir ve güvenli veritabanı işlemleri için Query Builder yöntemlerini kullanır.
  • 🎮 denetleyici: Denetleyiciler CI_Controller'ı genişletir, giriş sınıfı aracılığıyla kullanıcı girdisini okur ve doğru görünümü yükler.
  • 📈 Etki: Basit bir PHP anket uygulamasının taşınması, MVC yapısının tekrarlamayı nasıl azalttığını ve uzun vadeli bakımı nasıl basitleştirdiğini göstermektedir.

PHP MVC Çerçevesi

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

Codeateşleyici


Codeateşleyici


https://codeigniter.com/

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:


kohana


kohana


http://kohanaframework.org

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:


CakePHP'nin


CakePHP'nin


www.cakephp.org

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;


Zend

https://getlaminas.org/


Zend (şimdiki adıyla Laminas)

Bu güçlü bir çerçevedir;

  • Güvenli, güvenilir, hızlı ve ölçeklenebilir
  • Web servislerinin ve API'lerin oluşturulmasını destekler.

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:

  • Pimcore CMS,
  • DotKernel.

Zend framework'ünü kullanan şirketler arasında şunlar yer almaktadır:

  • BBC
  • Cisco
  • Webex
  • Teklifler.com

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

CodeIgniter karşılama sayfası, eski modelden sonra gösteriliyor.tracçerçeveyi

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

Veritabanı yapılandırma ayarları CodeIgniter database.php dosyası

  • 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/

Kamuoyu yoklaması oylama formu, tarafından oluşturulmuştur. CodeAteşleyici uygulaması

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.

Oy seçilmediğinde doğrulama uyarı mesajı görüntülenir.

En sevdiğiniz kütüphaneye oy verin, ardından Tamam'a tıklayın. Aşağıdaki sonuç sayfasını göreceksiniz.

Kamuoyu yoklaması sonuçları sayfası, her bir kişi için oy sayımlarını gösteriyor. JavaKomut dosyası kütüphanesi

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.

SSS

HMVC (Hiyerarşik Model Görünüm Denetleyici) bir uygulamayı birbirini çağırabilen bağımsız MVC üçlülerine ayırır. Bu çerçeveler, örneğin, kohana HMVC, büyük uygulamaların modülerleştirilmesine yardımcı olduğu için popüler hale geldi.

Evet. laravel Şu anda en popüler PHP MVC çerçevesidir. Burada açıklanan Model-View-Controller (MVC) ayrımını takip eder ve Eloquent ORM ve Blade şablonları gibi araçlar ekler.

Evet. Araçlar gibi GitHub Yardımcı Pilotu Komut istemlerinden modeller, denetleyiciler ve görünümler oluşturabilirsiniz. Ancak, oluşturulan kodu yine de güvenlik sorunları (örneğin, kaçış karakterlerinin kullanılmadığı çıktı ve SQL enjeksiyonu) açısından incelemelisiniz.

Hayır. Yapay zekâ asistanları kod yazmayı hızlandırır, ancak çerçeveler yine de uygulamaların sürdürülebilirliğini sağlayan test edilmiş yapıyı, güvenlik varsayılanlarını ve kuralları sunar. İkisi birlikte en iyi şekilde çalışır.

Hayır. Codeateşleyici Nesne yönelimli programlama konusunda sınırlı deneyime sahip geliştiriciler için uygundur. Sınıfları, metotları ve temel kalıtımı bilmek, model ve denetleyici kalıplarını takip etmek için yeterlidir.

Bu yazıyı şu şekilde özetleyin: