Zend Framework - görünümü yardımcıları vs viewscripts / partials ne zaman kullanılır

2 Cevap php

Ben bizim uygulama için görüntüleme nesneleri bir kütüphane oluşturma. Bunlar çeşitli görünümlerde ortak nesnelerin (kullanıcılar, konuşmalar, mesajlar, vb) bir çok html işlemek. Izlenme Ben nesne farklı biçimlendirme ile kendini farklı 'yakınlaştırma seviyelerini' geri tükürmek demek.

Bazı görüntü nesneleri örneğin işlemek için diğer görüntüleme nesneleri içerir. Bir kullanıcı listesi nesnesi (onlar listenin içine sığacak yüzden bu özel görünümü liste öğeleri onları geri tükürür) belli bir görünümde kullanıcı nesneleri işler

Ben ZF şeyler yapmanın doğru şekilde içine bu hareket etmeye çalışıyorum, ama bunların hepsi görünümü yardımcıları olmalı, eğer ben karar veremiyorum, ya da tüm görünüm komut / partials eğer.

Sadece onları komut görüntülemenize yapmak ve onları render - Ben onlara geçmek istiyorum herhangi bir bilgi ya da parametreler görünüm nesnesine atanacak olan (çünkü)> render biraz kirli görünüyor.

Partials biraz daha doğru değil haricinde emin görünüyor eğer onun görüntüleme mantığı yapıyor olması doğru bu ('showNotificationStatus' bir parametre olarak geçirilir, bu yayılma kılmak). Veya partials için koşer diğer partials (kullanıcı nesne oluşturma Bir kullanıcı liste) işlemek için eğer.

Görünüm yardımcıları bunu yapmak için muhtemelen doğru yol gibi görünüyor, ama bu görünümü yardımcıları overusing olup olmadığını bilmiyorum. Her nesne bir görünüm yardımcı olmak ve kendini işlemek için hangi yakınlaştırma düzeyi / konteyner biliyordu, ya da her bir ObjectView hatta kendi yardımcı olabilir (yani bir nesne içinde büyük bir switch ifadesi var) yani bir ObjectView parametre kabul olabilir. Görünümler hakkında bir güzel şey parametreleri geçirebilirsiniz ve bu seviyeden bir şey gerekiyorsa yine görünüm bağlamında erişimi sahiptir.

Bunların çoğu birkaç (yukarıdaki örneğin showNotificationStatus) ne yapacağını bilmek için bazı ekstra parametreler gerektiren, modeller kabul olacak. Bunun için doğru aracı nedir?

2 Cevap

Partials temel fikirlerden biri de yeniden kullanılabilir mümkün olduğunca olması gerekiyordu konum olduğunu - onlar kendi değişken kapsamı var dolayısıyla neden. Ben HTML küçük bit için oldukça aptal konteyner olarak partials kullanmak ister. Birkaç if() veya foreach() tabloların dışında hiçbir önemli mantığı.

Ben ciddi bir mantık gerekirse - Ben bir yardımcı kullanın. Yardımcılar mantığı ile uğraşan ve yöntemlerini işlemek çağırmak için sorumlu olmalıdır. Ben Rails dünya biliyor, yardımcıları bağlantılar veya görüntü etiketleri yapı kullanım gibi mantık küçük bit, saklanması eğilimi. Bu harika, ama ben ZF onları daha karmaşık hale herhangi bir zararı var sanmıyorum. Ben aslında benim iş nesneleri manzaralı çevirmek için kullanabilirsiniz.

Ben o partials içine geçmek, partials ve yardımcıları hem de kullanmak için en iyi yolu yardımcıları verileri kurdunuz olduğunu düşünüyorum. Bu şekilde HTML bakımı çok kolay kalır (ve ben her zaman birisi türleri echo "<a href='". $my_link . '"/>", bir kedi yavrusu yere ölür sanıyorum).

EDIT (ayrıntılı):

Yardımcıları hakkında hatırlanması gereken şey argümanlar ile bir kurucu ve özel üye, normal sınıflara gibi tedavi edilebilir olmasıdır. Eğer bir yardımcıya örneğini Yani, bir iş nesnesi olabilir, ve sonra (partials yoluyla) HTML işlemek birden fazla yöntemleri var.

Benim görüşüme Yani:

<?php $helper = $this->_helper->MyUserHelper($users); ?>
<ul>
  <?php $helper->user_list(); ?>
</ul> 

Burada, user_list() yöntem onlar bütün uygun verileri ile <li> öğeleri koleksiyonu döndürür.

Benim yardımcı kudreti bu gibi görünüyor:

class MyWidgetHelper 
{
  private $_widget;   

  public function __construct($users)
  {
     $this->_users = $users;
  }

  public function user_list()
  {
     // do any necessary logic here
     // then return the html that gets rendered. 
     // you can call a partial from here, and it just returns an HTML string.
     return $this->_view->partial('partials/_user_item.phtml', array('users' => $users)
  }
}

Yardımcıları, Partials (a <ul> ağacı özyinelemeli dizisi görüntülemek) mantığı dekorasyon için (örneğin dizi nesneyi dönüştürmek) mantığı içindir.

Aynı zamanda da $this->render('anyfile.ext') veya include() kullanabilir, unutmayın.