(PHP) MVC veya MVP View in Uygulanması

3 Cevap php

Ben ilk elden korku ve PHP çirkinliği neden olabilir ayak çekim ölçüde yaşadım. (Ben sadece dilini değiştirme etmiyorum neden merak ediyor olabilirsiniz ama ben buradayım, neden bu değil) benim sonraki projesi üzerine ve ben, bu sefer doğru yapıyor denemeye karar verdi, ya da en azından daha iyi oldum.

Ben tanımlanmış bazı modeller var, ve ben bir ana denetleyici başladım. Ben görünümünü nasıl uygulanacağı hakkında benim kararlarda bir çatal değilim. Şimdiye kadar, ana kontrolör aramak için ekran işlevleri listeleri verilebilir, ve sonra bir çağrı ile tüm sayfayı dışarı kusmak olabilir. Bu gibi görünüyor:

function Parse_Body()  
{  
    foreach ($this->body_calls as $command)  
    {  
        $call = $command['call'];  
        if (isset($command['args'])) $call($command['args']);  
        else $call();  
    }  
}

Benim ikilem şudur:

Ana kontrolör sadece echo $page; veya görüntü dosyaları, PHP dışında ham HTML kullanmanız gerekir böylece benim ekran işlevleri ürettikleri return HTML, bütün olması daha iyi olurdu çıkış kısa sürede okudu olarak alır?

Işler çıktı olsun eski ile, ana uygulama denetleyicisi tam sadece ekranların heves tam kontrol vazgeçmeden, kontrol edebilirsiniz. Onlar birlikte geçti var sürece söz değil, ekran tüm fonksiyonları bu listeleri (yukarıda) aramak için gerçekten bir görüntü dosyasından idam edilemez. Ikinci yöntemi ile, ben yerine büyük PHP string blok yaparken, gerçek HTML HTML yapmanın yararı olsun. Ayrıca ben sadece yerine bir işlevi çağırmadan, onu çalıştırmak için dosyayı ekleyebilirsiniz. Yani bu yöntemle, bir dosya bir işlevi gibi sanırım.

Herhangi bir giriş veya tavsiye lütfen?

3 Cevap

Would it be better to have all of my display functions return the HTML they generate, so that the main controller can just echo $page; or should the display files use raw HTML outside of PHP, which gets output as soon as it's read?

Php avantajlarından biri, işleme çıkışına benzer olmasıdır:

Yani:

<h1> <?= $myHeading; ?> </h1>

Daha açıktır:

echo "<h1>$myHeading</h1>";

: Daha bir daha

echo heading1($myHeading); //heading1() being an hypothethical user defined function.

Buna dayanarak ben HTML ve ve sadece php kullanarak uygun dinamik alanları yazdırmak için görünümde daha iyi olduğunu düşünün.

Çıkışı üzerinde çatal kuyruklu balina kontrolünü almak için kullanabilirsiniz: ob_start gurunu tavsiye olarak.

You could of course use any of the several php MVC frameworks out there. My prefered one, now is: Solarphp

ama Zend Framework ve Cakephp Seni de yardımcı olabilir.

And finally if you don't want to use any framework You could still use a pretty slim templating engine: phpSavant. That will save you a few headaches in the development of your view. th

Ayrıca çıkış kontrol fonksiyonlarını kullanarak, PHP kodu içinde HTML gömerken bir HTML dizesi elde edilmesi, hem parası alabilirsiniz:

PHP manuel @ dan http://www.php.net/manual/en/ref.outcontrol.php:

<?php

function callback($buffer)
{
  // replace all the apples with oranges
  return (str_replace("apples", "oranges", $buffer));
}

ob_start("callback");

?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php

ob_end_flush();

?>

İlk herşeyi tampon. sonra yazısının sonunda bir ayrıştırıcı kullanarak etiketleri değiştirin.

<?php

$page_buffer = '';

function p($s){
   global $page_buffer;
   $page_buffer .= $s;
}

$page_buffer = str_replace(
     array('<$content$>','<$title$>'),
     array($pagecontent,$pagetitle),
     $page_buffer);

echo $page_buffer;

?>

Samstyle PHP Framework çıktı tamponlama ve Model bu şekilde uygular

Ve ben "echo-ing" önce bir değişken içinde çıktı tamponlama yararları hakkında bahsetti mi? http://thephpcode.blogspot.com/2009/02/php-output-buffering.html