2009-08-23 18 views
0

のが私のメインコントローラ「ホテル」など、URLのパターンを持っているとしましょう:動的URLへの対処

/ホテル/コロラド州/ポプラ/ホテル名/

がどのように私は私のコントローラをプログラムする必要があります(このMVCを扱うにはまだMVCを習っています)

私はおそらく/ hotels /が設定された後に何かがあるかどうかをチェックしなければならないことを知っています。それ以外の場合、デフォルトのホテルページを表示します。 状態が設定されている場合は、都市名とホテル名を含む状態ページなどを表示します。

class hotelController { 
    function state() { 
    } 

    function city() { 
    } 

    function hotel() { 
    } 
} 

それぞれに3つの方法がありますか?アドバイスをいただければ幸いです。

+0

web2pyまたは別のMVCフレームワークを使用していますか? –

+0

私は実際にはフレームワークを使用していませんが、Zend/Django/Pylonsで簡単なことをやったことがあります。 –

答えて

1

通常、これはオブジェクトディスパッチで解決されます。これを処理するネストされたコントローラを作成することもできます。利点は、カプセル化という主要なOOPの原則に従うことができるということです。一般的にはホテルのコントローラーで一般的に問題となる機能(たとえば、新しいものを追加する)だけをグループ化します。

もう一つの利点は、 /ホテル/の後に設定されているものを確認してください。ディスパッチされるものが残っている場合、すなわち、現在のコントローラが要求全体を処理できなかった場合にのみ、新しいコントローラにディスパッチされます。

これは実際に特定のフレームワークに固有のものではありませんが、PylonsおよびTurbogears 2.0で完全に実装されています。 (詳細は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

州、都市、ホテル名を取得するには別々の方法がありますが、完全に有効です。

代わりに、あなたのテンプレート言語をサポートしている場合は、

など、情報/都市」、テンプレートであなたが「情報/状態」を行うように、辞書を返しhotel_info()メソッドを持っていることです

私はしかし、それ以外の場合は、あなただけの無意味である、あなた自身を書いてしまいますので、あなたは、MVCフレームワークになるはずだと思います

これらは、彼らがすべて良いです、私が見てきたものです:。

ちょうどPythonのためのより多くのトンがあります。

関連する問題