PHP MVC örneği nedir?

5 Cevap php

Ben MVC modelini anlamak için çalışıyorum. Burada MV olduğunu düşünüyorum ne:

Model:

<?php 
if($a == 2){
    $variable = 'two';
}
else{
    $variable = 'not two';
}
$this->output->addContent($variable);
$this->output->displayContent();
?> 

Görünüm:

<?php 

class output{

    private $content;

    public function addContent($var){
        $this->content =  'The variable is '.$var;
    }

    public function displayContent(){
        include 'header.php';
        echo $content;
        include 'footer.php';
    }

}
?>

Bu doğru mu? Eğer öyleyse, kontrol nedir?

5 Cevap

Kontrolör, mantık, modeli, veri, ve görünümü çıktı.

Yani, bu kontrolör olduğunu:

$model = new UserDB();
$user = $model->getUser("Chacha102");
$view = new UserPage($user->getName(), $user->getEmail());

echo $view->getHTML();

Model bana veri verecek UserDB sınıftır. Manzaranın model verileri vermek UserPage olduğunu ve çıkış sayfası daha sonra olacak.

Gördüğünüz gibi sadece kullanıcı verilerini alma ve görüntüleme çünkü, kontrolör, bu örnekte çok yapmaz. Bu MVC güzelliktir. Kontrolörü kullanıcı SQL veya HTML malzeme ile uğraşmak zorunda değildir, sadece verileri alır ve görünümüne geçirir.

Ayrıca, görünüm modeli hakkında hiçbir şey bilmiyor ve modeli görünümü hakkında hiçbir şey bilmiyor. Bu nedenle, ya uygulanmasını şans olabilir, ve bu diğer etkilemez.


Sizin örnekte daha ilgili, Doğru görünümü var, ama sizin denetleyicisi ve model karışık.

Siz bu rahatlatmak olabilir:

Denetleyici:

$model = new NumberToWord();
$word = $model->getWord($a);
$this->output->addContent($word);
$this->output->displayContent();

Model:

class NumberToWord{
    public function getWord($number)
    {
        if($number == 2){
            return 'two';
        }
        else{
             return 'not two';
        }
    }
 }

Ve aynı çıkış tutmak

Kontrolörler kullanıcı isteklerini almak - genellikle uygun bir kumanda yöntemi bir URL ve güzergahları istek alır yönlendirici çeşit var.

Modeller bir veritabanı (ya da başka bir veri kaynağından) / veri sorgulamak için bir kontrolör tarafından kullanılmaktadır.

İzlenme gerçek HTML çıktı işlemek için bir denetleyicisi denir.

Eğer yapmak istediğiniz tüm basit bir şablon sistemi oluşturmak ise, aswell ile gidebilir:

$content = 'blaba';
$tpl = file_get_contents('tpl.html');
echo str_replace('{content}',$content,$tpl);

Bir şablon dosyası gibi:

<html>
<head><title>Whatever</title></head>
<body>{content}</body>
</html>

Eğer bir model ve bir görünüm içine Denetleyicisi bölünmüş ettik gibi örnekte, daha fazla bulunuyor.

  • Model: İş mantık / kural ve ilişkisel haritalama nesne veritabanı tipik bir çeşit
  • Controller: bir çıktı oluşturmak için birlikte uygun Modeli (ler) ve görünüm (ler) çekerek isteklerini url Yanıtladı.
  • View: görsel yapısı çıkış alacaktır. Tipik bir "aptal" bileşeni.

Bu kafa karıştırıcı olabilir Çoğu web çerçeveleri tüm MVC değil, ama çok daha yakın bir benzerlik esas olarak, çünkü ilk karşılaşma bir web uygulaması için MVC mimari, PAC. Diğer bir deyişle, Model ve Görünüm konuşmak yok, ama Kontrolör verilen isteği anladığı bağlamda tarafından birlikte çekilmiş iki unsurlardır. Daha fazla bilgi için konuyla ilgili Larry Garfield mükemmel yorum atın:

http://www.garfieldtech.com/blog/mvc-vs-pac

Eğer gelişme MVC deseni ilgilenen varsa da, ben seni çok çerçeveler birini indirmek ve bir öğretici veya iki ile çalıştırmanızı öneririz. Kohana, CodeIgnitor, CakePHP, Zend ve bir Google-a-thon tekme başlatmak için yeterli olmalıdır!

Zend Framework: Surviving The Deep End MVC açıklayan bazı iyi bölümler vardır. MCV Intro ve özellikle bu seciton Çıkış the model.

Orada Modelin sayısız yorumlar vardır ama birçok programcılar için model veri erişimi, en çerçeveler yanlışlıkla tabii onlar tam Modeller vermeyin olduğunu kabul değil tarafından teşvik bir yanlış anlaşılma ile eşittir. Bizim terim sular altında toplumda, birçok çerçeveler belirsiz ve belgelerde gizlenmiş Modelinin tanımını bırakın.

"Nerede denetleyicisi bulunuyor" cevaplamak için:

Kontrolörler sadece Modelleri aramalar üzerine UI girdi harita ve müşteri etkileşimini ele bu anlamda uygulama davranışı tanımlamanız gerekir, ancak bu rolün ötesinde, diğer tüm uygulama mantığı Modelin içinde bulunan açık olmalıdır. Kontrolörler sadece sahne ve şeyler uygulama in faaliyet ortamı için organize bir şekilde çalışmanızı sağlar minimum kod ile aşağı yaratıklar

Ben bunu (ve diğer makaleler ve kitaplar onun referanslarını) iyi bir okuma ince düşünüyorum.