dsigh7478 2009-08-23 01:53
浏览 49
已采纳

处理动态网址

Let's say my main controller 'hotels' has a pattern for the url, such as:

/hotels/colorado/aspen/hotel-name/

How should I program my controller ( keep in mind I'm still learning MVC ) to handle this variable?

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() {
    }
}

Should I have 3 separate methods for each of those? Any advice is appreciated.

  • 写回答

2条回答 默认 最新

  • douzao1119 2009-08-23 10:33
    关注

    Usually this is solved with Object Dispatch. You can also create nested Controllers to handle this. An advantage is, that you can follow a major OOP principle, namely encapsulation, as you group all functionality that only concerns Hotels generally in the Hotel controller (for example adding a new one)

    Another advantage is, you dont have to check what is set after /hotels/ for example. It will only be dispatched to a new controller if there is something left to dispatch i.e. if the current controller wasnt able to handle the entire request.

    This isnt really specific to a certain framework, but it is fully implemented in Pylons and Turbogears 2.0. (For more details you may refer to 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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大