Dinamik URL'ler ile başa çıkmak

2 Cevap php

Benim ana denetleyicisi 'otel' gibi url için bir model, var diyelim:

/ Otel / colorado / kavak / otel-name /

Nasıl benim denetleyicisi bu değişkeni işlemek için (ben hala MVC öğreniyorum akılda tutmak) programlamak gerekir?

I know that I have to probably check if anything after /hotels/ is set, otherwise show the default hotels page. If a state is set, show the state page, and so forth with the city and hotel name.

class hotelController {
    function state() {
    }

    function city() {
    }

    function hotel() {
    }
}

Onlardan her biri için 3 ayrı yöntem var mıdır? Herhangi bir tavsiye takdir edilmektedir.

2 Cevap

Genellikle bu Nesne Gönderilecek ile çözülmüştür. Ayrıca bu işlemek için iç içe Kontrolörleri oluşturabilirsiniz. Bir avantajı önemli bir OOP ilkesini, yani kapsüllemeyi takip edebilir,, sen grubu sadece (bir yenisini ekleyerek örneğin) Otel denetleyicisi genel Otelleri ilgilendiren tüm işlevleri gibi

Bir başka avantajı, örneğin / / otel sonra set olduğunu kontrol etmek zorunda değilsin, olduğunu. Akım kontrolörü tüm isteği işlemek için mümkün değildi yani göndermek için sol bir şey varsa sadece yeni bir kontrol için sevk edilecektir.

Bu, belirli bir çerçeve gerçekten özel değildir, ama tamamen direği ve Turbogears 2.0 uygulanmaktadır. (Daha fazla bilgi için, http://turbogears.org/2.0/docs/main/TGControllers.html#the-lookup-method sevk edebilir)

class HotelController(Controller):
    """ Controller to handle requests to Hotels """

    def index(self):
        """ Handle the index page here """
        pass

    def addNewHotel(self):
        """ Register a new hotel here """
        pass

    def lookup(self, state_name, *remainder):
        """ Read the state, create a new StateController and dispatch """
        state_dispatch = StateController(state_name)
        return state_dispatch, remainder

class StateController(object):
    """ Controller used to dispatch """

    def __init__(self, state_name):
        # do your work on the state here
        pass

    def create(self, state_name):
        """ Create a new state here """

    def lookup(self, city_name, *remainder):
        """ keep on dispatching to other controllers """
        city_dispatch = CityController(city_name)
        return city_dispatch, remainder

Bu devlet, şehir ve otel adını almak için ayrı ayrı yöntemleri var mükemmel geçerli bulunuyor.

Böylece şablonu yok "info / devlet", bilgi / şehir ", vb alternatif, sizin çiftleşmiş dil desteği eğer, bir sözlük döndüren bir hotel_info () yöntemi olmasıdır

Aksi takdirde sadece anlamsız olduğunu, kendi yazma bitireceğiz çünkü ancak, bir MVC çerçeve içine bakmak gerektiğini düşünüyorum.

Bunlar hepsi iyi, ben baktım olanları şunlardır:

Sadece Python için daha ton vardır.