Ben adlı bir Model arayabilir miyim?

4 Cevap php

Tam gelişmiş bir PHP MVC kullanmak yerine, benim kullanımlarını en iyi uyacak bir tasarımı var. Ben temel çerçeve yaptım, ve benim web sitesi çalıştırmak gerekir modelleri ve kontrolörleri kodlanmış.

Şimdi İzlenme üzerine hareket ediyorum, ve ben küçük bir ikilem karşılaştı. Benim yaklaşım benim için iyi çalışıyor, ama ileride, ben ne yapıyorum içine almak için kötü bir alışkanlık olup olmadığını bilmek istiyorum.

What I'm trying to do:

Benim View, benim kimlik doğrulama sistemi çalışan bir modeli çağıran ve bir kullanıcının oturum durumunu talep ediyorum. Sonra görünümü içinde belli unsurları göstermek, nerede ve diğerlerini yerleştirmek için karar bu boolean kullanın.

Ben her oturum durum için ayrı görünümlerde tasarlayarak, ya da bu yaklaşım gayet iyi olmalı? Ancak, ben benim müşteri için yapıyorum işin içine bu MVC uygulama için gidiyorum, ben en iyi uygulamaları kullanmak gerekir.

Herhangi bir tavsiye mutluluk duyacağız!

4 Cevap

Ben adlı işletmeye modeli arayabilir miyim?

Yes, you can. Sürece separation of concerns M, V ve C arasında muhafaza gibi, sen adlı işletmeye Modeli (veya Kontrolör) çağrıda ücretsizdir. Çoğu MVC şemaları en az View ve Model arasında iki yönlü bir bağlantı gösteriyor. Eğer olsa yapmak istemiyorum, ne Görünümü içine Modeli (ya da kontrolörü) itibaren yer logic/code ve oradan modelini değiştirmek istemiyorum.

Örneğin, web sitenizin her sayfasında favori bloglar son on blog yazılarını başlıklarını toplayan sayfanızda bir widget olabilir. Sen arayarak manşetlere olsun demek MyFavFeeds::getLatest(); senin model. Lütfen seçenekleri nelerdir?

  1. Sen could denetleyici içine başlıkları almak için kodu ekleyin, ama bu DRY ilkesine aykırı olduğu, her denetleyici eylem çoğaltmak için gerektirecektir. Ayrıca, kumandanın endişe handling user input for specific actions ve her çağrı başlıkları getiriliyor hatta bu eylemleri ile ilgili değil ise muhtemelen.
  2. Lütfen mimari bunu destekliyorsa, başlıkları bir eklenti veya geri arama gelen Görünümü yüklenir ve enjekte olsun, yani preDispatch kanca çeşit verileri almak olabilir. Bu KURU olurdu, ama ikinci bir geliştirici bu eklenti farkında olmak ve kazayla değişken onun denetleyici eylem başlıkları tutarak üzerine değil olabilir. Ve örneğin, sen başlıkları yüklemek istemem hangi durumlar olabilir zaman sadece form tabanlı gönderimleri için onay sayfaları oluşturma, bu nedenle daha sonra eklentiyi devre dışı bırakmak için mekanizmaya sahip olurdu. Yani düşünün bir çok şey var.
  3. Sen Görünümü veya Düzen şablonu içine MyFavFeeds::getLatest() (değil kod) için arama ya, daha iyi bir ViewHelper, sizin model sınıfı için çağrı saklar ve widget'ı vermektedir. Bu şekilde herhangi bir değişken veya tekrarını yazılmadan konusunda endişelenmenize gerek yok. Eğer görünümü başlıkları gerekmez zaman, sadece onu dahil değildir.

Diğer soru hakkında:

In my View, I'm calling a Model that runs my authentication system, and requesting the login status of a user. I then use that boolean to decide whether to show certain elements within the view, and where to place others.

Kimlik Doğrulama herhangi bir denetleyici eylemleri denir önce, erken uygulama akışında yapmak istediğiniz bir şeydir. Böylece, olmamalıdır run your (entire) authentication system görünümünde. Gerçek kimlik View-ilişkili mantık değil. Sadece kimlik doğrulamasından sonra kullanıcı durumunu talep, diğer taraftan, tamam. Eğer kullanıcı adı gösteren ve giriş / çıkış düğmesine veren bir widget'ı işlemek istiyorsanız Örneğin, bu gibi bir şey yapmak için iyi olurdu

<?php //UserHelper
class UserMenuHelper
{
    public function getUserMenu()
    {
        $link = '<a href="/user/logout">Logout</a>';
        if(MyAuth::userHasIdentity()) {
           $link = sprintf('<a href="/user/logout">Logout %s</a>',
                            MyAuth::getUsername());
        }
        return $link;
    }
}

Bir Kullanıcı rolü ile modifiye edilebilir için GUI daha büyük bölümlerini var ise, kısmi bloklar halinde ayrı senin Görünüm kırmak ve durumuna göre bunları içeren, yerine görüntüle Yardımcısı içine tüm HTML yazma isteyebilirsiniz.

Sadece kullanıcı rolüne dayalı bir navigasyon işlemek için arıyorsanız, bunu nasıl görmek için Zend Framework adlı Zend_Navigation ve Zend_Acl bakabilirsiniz.

Sen can, ama shouldn't. Birkaç ekstrem durumlar dışında (giriş-in durumuna göre belirlenir ve görünümünüzü dallanma kesinlikle bir "uç durum" değil), bir görünümden modeli şeyler aramak için hemen hemen her zaman kötü bir fikir.

Ne muhtemelen sizin durumunuzda yapmak istiyorum kontrolör üzerinden görünümüne boolean geçmektedir. Bu şekilde, kullanıcı modeli hakkında bir şey değiştirirseniz, görünümü kadar uzun kontrolör aynı davranışı tutar olarak, bilmek zorunda değildir.

Tamam, ben gerçekten mantık-serbest mümkün olduğunca benim Görüntüleme tutmak denemek istiyorum. Eğer dayalı bir şey geçmek gerekiyorsa, örneğin bir model yöntemin sonucu, bu delegeler render yerde bir denetleyicisi koymak.

Modellerde eşyalarını yap, denetleyicileri ne yapmak için modeller söyleyin ve aynı zamanda denetleyicileri ne göstermek için görüşlerinizi söyleyin: Sadece emin temel fikri takip yapmak.

Ben sadece sorun kendimi almak için MVC hakkında yeterli biliyorum, ben her zaman senin bakış KESİNLİKLE kullanıcı arayüzü olmadıkça, o zaman orada olmamalı gerçeği ile yaşadım.

Ayrıca, ben de ince denetleyicileri, yağ modelleri fikri ile koştu ettik.

Bunların gidiyor, ben işlemek için uygun görünümü verir ve görünümüne o geçer, kimlik doğrulama sistemi modeline bir yöntem ekleyerek öneririm.