MVC ...

4 Cevap php

Ben Neyi gördüm ve nasıl MVC görünüm olarak, model olarak kontrolörü olarak sınıfları ve HTML şablonları sınıflarını kullandık ÖNERİ tüm örnekler. Ve bunların hepsi bir index.php yazısı ve tüm siteyi çalıştırmak için url farklı istekleri oluşuyordu.

Yani hepsi gibi bir şey oldum ...

MODEL
class User{
    function getUser($userID){
      $sql = mysql_query('SELECT name......');
      // more code.....
      return $array
    }
}

VIEW
<h2><?php echo $user['name']; ?></h2>

CONTROLLER
class Controller{
    $userModel = new User;
    $userInfo = $userModel->getUser($id);

    $template = new Template('usertemplate.tpl');
    $template->setVariables($userInfo);
    $template->display();
}

Modeli sadece almak ve (I dersi her zaman gerekli öyle ve fonksiyonlar kullanılabilir varsaysak bile olsa) verileri kaydetmek sınıfların neden yapıldığını anlıyorum. Şablon esas HTML oluşur anlıyorum. Ama denetleyici bir sınıf neden anlamıyorum. Ben kontrolör (model kullanıcıların veri alır ve görüntülemek için şablona gönderir userprofile.php gibi) bir usul komut olarak varsayılabilir.

Ayrıca, ben okudum her öğretici mod yeniden yazılmasıyla ele merak ve tamamını çalıştırmak için "index.php? = 1 kullanıcı" veya index.php? Haber = 3 gibi url istekleri ile bir tek sayfa kullanarak edildi bir site. Nedir user_profile.php? Id = 1 veya news.php? Id = 3 gibi ayrı sayfalara sahip yanlış ...

Biri hızlı bir "öğretici" ve yol boyunca bir açıklama ile bana yardım edebilir misiniz. Gibi ... nasıl bir kayıt formu nereye ve neden gideceğini, ne MVC kullanarak uygulanabilir olurdu? teşekkür ederim

PS. tasarım desenleri başka ne tür orada

4 Cevap

MVC PHP'nin sürümü kontrolörünün "kazanmak" Büyük uzakta uygulama yanıt her URL için ayrı bir PHP sayfası zorunda olsun.

Her URL için oluşturulan yeni tek bir sayfa varsa, siz (kendiniz ya) ihtiyaç duyulan kütüphanelerde çekin ve aynı şekilde şablon / düzeni motoru başlatmak için geliştiriciler bekliyoruz. Eğer tek bir geliştirici, genellikle anlamına gelir, çok güçlü olmak biter şeyler yapmanın "standart" bir şekilde kırmak için günaha olsalar bile each URL/PHP-page ends up being its own mini-application yerine her URL / PHP sayfalık bir parçası olma Aynı uygulama. Birden geliştiriciler varsa bunun için garanti edilir.

Son sonuçlar proje üzerinde çalışmak zorunda kullanıcılar ve geliştiriciler hem de tutarsız bir deneyim yaşatıyor, birbirleri ile oynamak güzel ve (her şeyi genel ad dışarı asılı) ayıklamak zor değil sayfaları ve bileşenleri .

MVC çerçeveler de daha kolay sitenizi dostu URL'ler vermek için yapmak. Genellikle yeterince need sorgu dize değişkenleri çok sayıda başvurmak gerekmez yönlendirme sisteminde var oluyor. Okunabilir URL'ler SEO ve anlayışlı kullanıcılar için, bir artı vardır.

Son olarak, denetleyici yöntemleri kolaylıkla test edilebilir birim haline kontrolörüne sahip olduğunda bu en mağazaları ile gökyüzünde pasta, olmasına rağmen. Eğer teknik olmayan bir MVC sitenin etrafında bir test koşum sarın da, her zaman bir baş belası, ve asla bunu istiyorum gibi çalışır.

using a single page with requests in the url like "index.php?user=1", or index.php?news=3 to run the entire site. Whats wrong with having separate pages like user_profile.php?id=1, or news.php?id=3...

Bazı şeyler daha kolay hale getirir, tek bir giriş noktası kullanarak, sanırım:

  • Sen user_profile.php ve news.php kod herhangi bir bölümünü çoğaltmak gerekmez
  • Eğer (örneğin güvenlik için PHPIDS, ya da ACL gibi) filtre her türlü kurmak istiyorsanız, sadece değiştirmek için bir dosya var ve bu tüm uygulama için bitti.

PS. what other kind of design patterns are there

Tasarım desenleri bir yeri vardır; bunların her birinin sayfasına link ile, daha fazla bilgi için - Eğer örneğin wikipedia üzerinde Design pattern (computer science) makale, bir listesini bulabilirsiniz.

Orada her eylem için ayrı ayrı komut olan yanlış bir şey, ve aslında denetleyicisi için bir sınıf kullanmadan, bir MVC mimarlığa bu şekilde oluşturabilirsiniz. Ben hem stillerini destekler anda bir MVC framework üzerinde çalışıyorum.

Önemli olan farklı kaygılar ayrılmasını tutmak gerçekten. Veritabanı mantık modellerinizde gider, Düzen mantık şablonları gider ve denetleyicisi her şey.

Yani çok basit bir örneğin aşağıdaki kod ile bir script "register.php" olabilir

$signup_options = SignupOptions::getSignupOptions(); // Load some data      
require("register_form.php");  // Pass it to the view

Ve bu mesajlar register_process.php için

$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
$email    = $_REQUEST['email'];
Users::Register( $username, $password, $email );
header( 'location: register_success.php' );

MVC tüm uygulamalar için uygun değildir, bu yüzden bir proje bazında Mimarinizi düşünmelisiniz. Birçok site için, sadece bağımsız komut bir demet sahip çalışıyor. Ancak büyük daha karmaşık uygulamalar için, MVC web uygulamaları geliştirme güvenilir ve ölçeklenebilir bir yol olarak kendini kanıtlamıştır.

Başka bir ortak tasarım deseni doğrudan bir şablon diyoruz nerede olduğu, "Görünüm-Yardımcı", ve şablon şablon ve modeller arasında iş mantığını gerçekleştiren bir "Yardımcı" nesne çağırır. Kavramına benzer, ama hala MVC gibi endişeleri ayrımı korurken, bunu gerekmez şablonları için herhangi bir ekstra koduna sahip atlayabilirsiniz. (Fark yerine bir denetleyici çağırmaktan daha doğrudan şablon dediğimiz aslında).

Orada iyi bir uygulama uygulamak için çeşitli yollar vardır, ama sadece birkaç kavram üzerinde dokunmak için gidiyorum. Bu kavramlar Samstyle PHP Framework alınır.

Model (Table Data Gateway), View, View Controller ve arka uç Controller: Öncelikle, bu bileşenleri var.

Bu View Controller aslında görünümü (örneğin kayıt formunu görüntülemek) gibi olacak nasıl denetler. Backend Kontrol uç kullanıcı verileri işler ve Modeli (veritabanı) ile etkileşime girer.

Yani burada biz kolayca Post-Redirect-Get içine entegre edebilirsiniz.

Eğer formu görüntülemek ve şablon HTML dosyası içine içeriğini ayrıştırmak View Controller için register.php söylüyorlar.

Kullanıcı, form kullanır göndermek ve daha sonra Backend Denetleyicisi ilan edilecektir deck.php. Backend Kontrol onay daha sonra veritabanı ile etkileşime yardımcı olacaktır fonksiyonları (Tablo Veri Ağ Geçidi) için veri geçer doğrular. Etkileşim yapıldıktan sonra, kullanıcı bir hata ile bir başarı sayfasına veya kayıt sayfasına ya yönlendirilir.

Modeli (Tablo Veri Ağ Geçidi), aslında bir veritabanı ile bir dizi ve daha sonra CRUD almak işlevlere sahiptir.