Bir işlev veya yöntem html kodu geri dönmek için kötü bir fikir mi?

5 Cevap

Ben bu fikri var:

Birisi aradığında mysite.com/layer1/layer2/something, sonra aradım eylemi başlatmak isteyen something. Bu eylem sadece bir işlev içeren bir actions dizininde bir dosyadır. Bu fonksiyon bazı bağlam parametre alır ve HTML çıktısı dönmek gerekiyordu. Bir değişken gider Bu çıkış, sonra bir ana şablon içine getirilecek ve nihayet küçük çerçeve kerede tüm html çıktı dışarı atmak olacaktır.

Bir işlev veya yöntem html kodu büyük miktarlarda geri dönmek için iyi ya da kötü tasarım Şimdi eğer ben bilmiyorum?

5 Cevap

Bir işlevden HTML dönen yanlış bir şey bu işlevi sunum katmanı yaşıyor ve iş / denetleyici / sunum mantığı iyi ayrılmasını sağlamak var İşletmesi bulunuyor.

Ancak, bu özel durumda, ben sadece yankı yoluyla çıkış dökümü sizin "eylem" dosyaları olan ve özgün işlev çağrısı yapıyoruz yere çıktı tamponlama ile yakalayan tavsiye ederim. Bu şekilde, eylem dosyalarını bir tampon değişken üzerine veri bir sürü concatting ve emin geri alır yapma konusunda endişelenmenize gerek yok. Bu dosyaları (muhtemelen) büyük ölçüde HTML odaklı çünkü Ayrıca, size çok daha güzel ve daha legiable sözdizimi kullanmak mümkün olacak:

<div id="Outer">
  <?= $content ?>
  <p class="Inner">
    <?= $more_content ?>
  </p>
</div>

: Ile ilgili olarak zıt

$buffer .= '<div id="Outer">' . $content .
           '<p class="Inner">' . $more_content .
           '</p></div>';

En azından, ilk yolu IDE / editör uygun dizim gerçekleştirmek için olanak sağlar.

Bu ile ilgili olması muhtemeldir şey değildir. Gerekirse sadece caching faydalanmak.

Genel olarak konuşursak, hayır onun değil. Bazı tür bir şablon yalıtmak ve daha sonra işlenmiş şablonu dönmelidir.

Örneğin:

Eylem dosyasında:

public function iterateList($data, $template = 'default.php')
{
   /* do stuff processing data
   keeping it super simple we'll say $data = array(
     0=> array('title'=>'HEllo World', 'content'=>'lorem ipsum')
     1 => array('title' => 'Look ma im iterating' => 'cool')
   );
   */
   ob_start();
   include($template);
   return ob_get_clean();
}

Lütfen default.php bu, yani burada mevcuttur dahil fonksiyonun yerel kapsamında şeyi unutmayın. $ Veri

<ul>
<?php foreach($data as $item):?>
  <li>
    <h3><?php echo $item['title']; ?></h3>
    <p><?php echo $item['content']; ?></p>
  </li>
<?php endforeach; ?>
</ul>

Eğer basit değişiklik işlevi ve şablona geçmek args yapısını güncellemek için eylemi değiştirmek zorunda asla bu şekilde ...

Eğer özlü html Standa parçacıkları yapmak için bazı basit işaretlemeleri işlevleri (yani görünümü yardımcıları) LIKK varsa onun bir istisna olduğu yer gibi, belirli bir form denetimi veya bir köprüyü ya da bir şey yaratmak. Eğer mantıklı - Ama o şey her yerde kullanabilirsiniz böylece bağımsız olması gerektiğini sizin "eylem" olmalıdır.

MVC ve Ön Kontrol ve / veya Page Denetleyici desenleri kadar okuyun.

Bunu mümkün olduğunca kaçınmak istiyorum, ama bunu yapmak için ok zamanlar vardır. Fonksiyon birden fazla yerden denir değil ve bu başka bir şey iç içe veya bağımlılıkları bir şey var olacak değil Genellikle eğer.

Ham HTML çıktısı genellikle dağınık kod yol açar ve genellikle geliştiriciler bunu tartışıyor alıngan yapar.

Eğer bir kural olarak bu iş için gitmiyoruz ve geri gelmek ve devam edin, daha fazla yerde kullanmak gerekiyorsa refactor yeterince disiplinli Yani eğer başparmak kuraldır. Ancak, birçok kişi bunun üzerine kaşlarını yok.

MVC çerçeveler, sık sık bu soruyu yollar çok sayıda cevap bulacaksınız. İşte bu getirmedi, yaşamak için girişim iki ilke vardır.

1) Seperate business logic from presentation logic. If the function in question takes input from another source, and simply does some formatting on it, then it is similar to the view helpers used in most MVC frameworks, and thus is seperated from any business logic that processed the input to the function. However, if the function itself is doing logic based upon its input to determine other things about the data, other then simply how to display it, you wind up with a situation where if you have more then one case down the road, this function will begin to grow substantially, and eventually may become impossible to understand, or inefficient.

2) sistem tarafından işlenen veriler çeşitli biçimlerde kullanılabilir olmalıdır. Veri diğer kullanımlar için gerekli olabilir Eğer, ekran ötesinde, o daha sonra kendinizi size ihtiyacınız olduğunu fark, 'Ted Geliştirici, Geliştirici Ted' in, 'Ted Geliştirici' Refactor, hatta kod çoğaltmak zorunda bulabilirsiniz 've' Ted 'formları, ve işlev sadece üçünden birini döndürür.