MVC Uygulama Archietecture anlamak için çalışılıyor

3 Cevap php

Ben MVC yeni ve ben MVC ben alışığım ne sığar nasıl anlamaya çalışıyorum.

Ev, İletişim, Hakkında: Diyelim ki sayfaları ile basit bir statik web sitesi var diyelim.

Ve en Ben bütün site için görünüm olacak bir xhtml / css "şablon" var diyelim. O etiketi ben sayfa içeriği için bir değişken olacak, basit tutmak için.

Yani denetleyicisi ben her sayfa için içerik için ayrı bir işlevi var peki??

Örneğin,:.

function home()
{
     $data['content'] = "<p>some html home page content</p>";

     $this->load->view('myView', $data);
}

function about()
{
     $data['content'] = "<p>some html about page content</p>";

     $this->load->view('myView', $data);
}

Ben bu süper-basitleştirilmiş bakmak olduğunu biliyorum iken Yani, her farklı sayfa için bir işlevi oluşturmak için en iyi uygulama nedir?

Ama 100 sayfadan oluşan bir site ne varsa? Kontrolör yönetmek için çok büyük almaz?

Her sayfa için tek bir denetleyici olsaydı Ama sonra tekrar, bu da onu yönetmek zor olacak gibi görünüyor?

Ben MVC kavramı yanı sıra veritabanı bağlantısı görevler yanı sıra bazı CRUD için yararlı olduğunu anlamak için başlıyorum. Ama MVC "sayfalar" düşünmek ne kadar şaşkın kalır.

Any advice is much appreciated. What's the best practice?

3 Cevap

MVC denetleyicisi kod tabanının büyük bölümü olma eğilimindedir. Yani kadarıyla çok büyük alma endişesi gibi, bu beklenen bir şey.

MVC kullanırken Ancak, genellikle Model-View-Controller 1'e 1 ilişkisi olmasını istiyorum. Eğer ilgili sayfa varsa, özellikle bu görünümde ve o sayfada ne yapabilirim ile ilişkili eylemler için bir denetleyici isteyeceksiniz. Yanıtı, başka bir kontrolör buna olaylara yanıt hangi durumda, başka bir görünüm yüklemek olabilir. Model kontrolörü adlı arasında paylaşılabilir, ancak modeli hakkında hiçbir şey bilmek ya da MVC, tutkal gibi fonksiyonları bir parçası olmak denetleyicisi kırarım senin bakış herhangi bir parça istemiyorum.

Eğer gerçekten belirtildiği dtroy gibi PHP ile bir şey yapıyorsanız, muhtemelen yardımcı olacak. Ne yazık ki, iPhone MVC ile deneyimlerinden geliyorum. Aynı kavram olsa çevresinde.

In summary though: If you keep the controller responsible solely for the actions that can occur on a given view, like button clicks, etc... it should help keep your controller from getting too large and unwieldy.

Edit:

Ben adres vermedi sizin endişe yanıt olarak, söz unuttum. Örneğin, "Kontrolör Patlama", mutlaka her sayfa için bir denetleyicisi oluşturmak istemeyebilirsiniz, ama bakış her tür için bir, yardımcı olmak için. Örneğin, bir AboutViewController ve ContentViewController var ve belki bir loginViewController olabilir. Eğer contentView yeniden eğer AboutView ve LoginView oldukça benzersiz olurdu ama. Birisi "Widget'lar" hakkında bir şeyler talep Yani, içerik görünümü sadece sizin modelinden alınan aletler hakkında bilgileri görüntülemek ve görünüm tarafından tanımlanan uygun konumda görüntülemek olacaktır. kullanıcı "vites" hakkında bir şeyler istediğinde o zaman, aynı şekilde farklı farklı bilgileri görüntülemek için aynı ContentViewController yeniden kullanabilirsiniz.

Temelde sizin Page modeli için bir Page denetleyicisi olacak. Sonra oluşturduğunuz her sayfa Sayfa denetleyicisi "show" eylem yönlendirilir alacak "/ Sayfalar / 1" gibi bir url var olacaktır.

MVC kesinlikle alışmak biraz alır, ama sen onu asmak olsun, sen gerçekten gibi olacak. Ayrıca gerçekten bu gibi sorunlar ile yardımcı olacak, DİNLENME tasarımı kaynaklara bakın.

Ben şimdi web tasarım, ben kaynaklar (modeller, daha fazla ya da daha az) açısından düşünüyorum. Yani örneğin, birçok sayfaları veya kullanıcıları veya sorularınız ya da yemek tarifleri ya ... bunların her biri bir şey / modeldir. Ben genellikle her biri için ayrı bir denetleyici yapmak ve bu kontrolör 7 eylemleri koymak:

index - used to show a list of all the Pages (URL like "/Pages")
show - used to show an individual Page (URL like "/Pages/1")
new - used to show a form to create a new Page
edit - used to show an edit form for a Page
create - used to actually create the new Page from the new form
update - used to actually update the Page from the edit form
destroy - used to delete a Page

Bu herkes (ben REST tartışmanın içine bu açmak istemiyorum) için değil, ama bana çok yardımcı olur, ve ben açıkça Pages gibi nesneleri olan şeyler ile uğraşırken mantıklı düşünüyorum.

100 sayfadan oluşan bir site varsa, içerik çoğu bir veritabanında saklanır isterim.

Lütfen URL'ler böyle bir şey bakmak için değişmiş olacaktır:

http://yoursite.com/showpage?pageid=mvc
http://yoursite.com/showpage?pageid=home
http://yoursite.com/showpage?pageid=whatever

ve denetleyici bu gibi bir şey olacaktır:

function showpage()
{
     $post = yourframework.getmodel('post').getPost($_GET['pageid']);

     $data['title'] = "<p>" . $post.title . "</p>";
     $data['content'] = "<p>" . $post.title . "</p>";

     $this->load->view('myView', $data);
}

Sözdizimsel doğru değil ama fikir olsun. Size tüm sayfaları 100 sunar sadece bir işlevi olması gerekir. Tüm sayfaları benzer bir yapıya sahip, bu işe olur.

Diğer bir deyişle, sadece vanilya php gibi mvc çalışır ... (ama umarım biraz temiz görünüyor)