Ben pek çok kez tekrarlanır presentational kod küçük bir bölümüne başvurmak için "kısmi" terimini kullanıyorum. Örneğin, bir kenar çubuğu. Iş ve sunum mantığı bir kenar çubuğu da dahil olmak üzere, karıştırılır vanilya PHP, hiçbir sorun:
if($someCondition) {
include('sidebar.php');
}
Ancak, MVC tasarım deseni, sunum mantığı iş mantığı iken görünümünde tutulmalıdır denetleyicisi tutulmalıdır. Ben koşulsuz kısmi dahil etmek istiyorsanız, o zaman bu sadece benim görünümünde include('sidebar.php')
olabilir beri sorunsuz olduğunu. Ancak, ben artık bunu yapabilirsiniz şartlı çünkü mantık benim görüşüme yasaklandı eğer.
Ben bir dizi çözüm çalıştılar ama hepsi sorunları var. Şu anda Çözüm 2 kullanıyorum:
Solution 1
Şartlı benim denetleyicisi içerik içerebilir bence sınıfında bir içerme işlevi oluşturun. Yani benim denetleyicisi ben şu mantığı olabilir:
if($someCondition) {
$this->view->include('sidebar.php');
}
$this->view->show('index.php');
Problems: sidebar.php ayrıştırma çeşit yapmak için görünüm nesne üzerinde yöntemini dahil gerektiren belirli bir noktada index.php içine dahil edilmesi gerekir.
Solution 2
Görünümü dışında partials kontrol ettirin ve denetleyici içine koydu:
if($someCondition) {
$this->view->show('header.php', 'sidebar.php', 'index.php', 'footer.php');
}
else {
$this->view->show('header.php', 'index.php', 'footer.php');
}
Problems: kontrolörün aleme sunum mantığının büyük bir kısmını taşır. Bu başlık dahil olsun veya olmasın karar görünümü için bana daha doğal gibi görünüyor. Nitekim, ben bulabilirim her PHP MVC öğretici, görünümü değil denetleyici kontrolü altında partials vardır.
Solution 3
Görünüm çoğaltmak ve kenar çubuğu içerir böylece klon değiştirebilir. Sonra şartlı denetleyicisi bir veya diğer yükleyebilir:
if($someCondition) {
$this->view->show('indexWithSidebar.php');
}
else {
$this->view->show('index.php');
}
Kod Problems: Teksir. Ben şartlı yüklenen gereken 2 sidebars olsaydı ne olacağını düşünün. Sonra gerekir index.php, indexWithSidebar1.php, indexWithSidebar2.php, indexWithSidebar1And2.php
. Bu sadece her koşulu ile kötüleşir. Kısmi olarak kenar çubuğunu dışarı alarak tüm nokta yine de kopyalayan önlemek için olduğunu ve bu yaklaşım noktayı yenmek gibi görünüyor unutmayın.
Bu çözümlerden birini "doğru" çözüm ve eğer öyleyse, nasıl kendi sorunlarını aşabiliriz? Vardır Orada daha iyi bir yaklaşım var mı?