2009-08-23 3 views
0

Lassen Sie sich meine Hauptcontroller sagen 'Hotels' hat ein Muster für die URL, wie zum Beispiel:Umgang mit dynamischer URLs

/Hotels/Colorado/Aspen/Hotelnamen/

Wie soll ich meinen Controller programmieren (Denken Sie daran, ich lerne immer noch MVC) um diese Variable zu behandeln?

Ich weiß, dass ich wahrscheinlich überprüfen muss, ob etwas nach/Hotels/gesetzt ist, ansonsten zeigen Sie die Standard-Hotels-Seite. Wenn ein Status festgelegt ist, zeigen Sie die Statusseite usw. mit dem Namen der Stadt und des Hotels an.

class hotelController { 
    function state() { 
    } 

    function city() { 
    } 

    function hotel() { 
    } 
} 

Sollte ich 3 separate Methoden für jeden von denen haben? Jeder Rat wird geschätzt.

+0

Verwenden Sie web2py oder ein anderes MVC-Framework? –

+0

Ich benutze eigentlich kein Framework, aber ich habe ein paar einfache Sachen in Zend/Django/Pylons gemacht, ich suche nur nach allgemeinen Programmierantworten um diese zu lösen, egal in welcher Sprache. –

Antwort

1

In der Regel wird dies mit Object Dispatch gelöst. Sie können auch verschachtelte Controller erstellen, um dies zu handhaben. Ein Vorteil ist, dass Sie einem wichtigen OOP-Prinzip folgen können, nämlich der Kapselung, da Sie alle Funktionen gruppieren, die nur Hotels im Allgemeinen betreffen (zum Beispiel das Hinzufügen eines neuen)

Ein weiterer Vorteil ist, dass Sie nicht müssen Überprüfen Sie, was nach/Hotels/zum Beispiel eingestellt ist. Es wird nur dann an einen neuen Controller gesendet, wenn noch etwas zu versenden ist, d. H. Wenn der aktuelle Controller nicht in der Lage war, die gesamte Anfrage zu bearbeiten.

Dies ist nicht wirklich spezifisch für ein bestimmtes Framework, aber es ist vollständig in Pylons und Turbogears 2.0 implementiert. (Weitere Informationen finden Sie unter http://turbogears.org/2.0/docs/main/TGControllers.html#the-lookup-method)

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 
0

Es ist vollkommen zulässig, verschiedene Methoden zu verwenden, um den Namen des Bundesstaates, der Stadt und des Hotels zu erhalten.

Eine Alternative, wenn Ihre Template-Sprache Unterstützung es ist eine hotel_info() -Methode zu haben, die ein Wörterbuch zurück, so dass Sie in der Vorlage tun „info/Zustand“, Info/Stadt“usw.

.

ich aber denken Sie, in ein MVC-Framework aussehen sollte, denn sonst werden Sie nur Ihre eigenen am Ende zu schreiben, die sinnlos ist

Dies sind diejenigen, die ich betrachtet haben, sind sie alle gut:

Es gibt Tonnen mehr nur für Python.