Bunu yapmak için uygun MVC yolu nedir? ...

2 Cevap php

CodeIgniter'ı veya Kohana (Ben aslında Kohana kullanıyorum) kullanarak PHP genel MVC tasarım prensibi hakkında kısa bir soru.

Ben MVC yeniyim ve bu yanlış almak istemiyorum ... bu yüzden tablolar varsa ben merak ediyorum:

categories, pages, notes

Ben ... ayrı bir denetleyici ve her biri için bir görünüm oluşturabilirsiniz? Yani insanlar gidebilirsiniz

/category/#
/page/#
/note/#

Ama sonra ben de sayfa başına birden notları görüntülemek için mümkün olmak istiyorum Diyelim ki, bu sayfa görünümünde bir döngü içinde not görünümünü aramak için kötü olurdu. Yani notları çizer ve not görünümü ve sayfa görünümünde bir döngü o işleve değişkenler geçmek bir işlev çeşit oluşturmak gerekir? Bu ben bunu başka nasıl yapmalıyım en iyi bu konuda gitmek için yol olmasa olurdu ...?

Teşekkürler,

Serhiy

2 Cevap

Ben şahsen bir öğe ve birden bir "liste" yöntemi için bir "show" yöntemi olurdu. Denetleyicinizdeki size "show" yöntemi için $page_data['note'] = get_note(cat_id,page_id) gibi bir şey söylemek ve $page_data['notes'] = get_all_notes(cat_id) "liste" yöntemi için olabilir.

Sonra görünümünde, her biri için $page_data['notes'] ve ekran HTML üzerinde size döngü. Liste görünümü "show" görünümü olarak aynı "notu" HTML kullanarak ise, bir not verilen HTML tükürmek için bir şablon ya da işlev oluşturun:

// In your "list" view
foreach($n in $page_data['notes']){
    print_note_html($n)
}

//In your "show" view
print_note_html($n)

print_note_html function Notes için tüm görünümler tarafından erişilebilir yardımcı bir yöntem olabilir. Mantıklı?

CodeIgniter'daki Ben bir görünümde birden çok kez dahil edilmesi gerekebilir UI öğeleri için biçimlendirme dönmek işlevleri koymak ayrı bir yardımcı dosyası oluşturun.

Sizin örnekte, ben bir not için biçimlendirme dönmek için bir işlev yaratacak.

application/helpers/view_helper.php

function note($note)
{
    return '<div class="note">' .
        '<h2>' . $note->title . '</h2>' .
        '<p>' . $note->contents . '</p></div>';
}

Ben normalde bu yardımcı dosyayı otomatik yük olacaktır. Ve sonra görünümünde böyle bir şey yapardı.

echo note($note);

Bir görünümde notlar listesi için, ben bu işlevini çağırarak listeyi yinelemek istiyorum.

<div class="note-list">
<?php foreach ($notes as $note) : ?>
    <?php echo note($note); ?>
<?php endforeach; ?>
</div>

Ben başka görünümünde bir görünüm birçok kez gibi yavaş olduğunu gördük. Ben bu şekilde yaptım neden Thats.

Edit

Ben sadece CodeIgniter Loader sınıfının içine kazılmış ve emin yeterli bir PHP dahil aramak her zaman yapılıyor

$this->load->view('view_name');

Bu 20 notların bir listesini görüntülemek için bu yöntemi kullanırsanız, ayrı 20 içerir yapıyor olması için gidiyoruz demektir.