处理动态网址

时间:2009-08-23 01:53:38

标签: php python url-routing

假设我的主控制器'hotels'有一个url模式,例如:

/酒店/科罗拉多州/白杨/酒店名/

我应该如何编程我的控制器(请记住我还在学习MVC)来处理这个变量?

我知道我必须检查/ hotels /之后是否有任何设置,否则显示默认酒店页面。 如果设置了州,则显示州页面,依此类推城市和酒店名称。

class hotelController {
    function state() {
    }

    function city() {
    }

    function hotel() {
    }
}

我应该为每个方法分别使用3种方法吗?任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

通常这是通过Object Dispatch解决的。您还可以创建嵌套控制器来处理此问题。一个优点是,您可以遵循主要的OOP原则,即封装,因为您将所有仅涉及酒店控制器中的酒店的功能(例如添加新的功能)组合在一起

另一个优点是,您不必检查/ hotels /之后设置的内容。如果还有一些东西需要发送,即只有当前控制器无法处理整个请求,它才会被分派给新的控制器。

这并非特定于某个框架,但它完全在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

答案 1 :(得分:0)

使用单独的方法获取州,城市和酒店名称是完全有效的。

如果您的模板语言支持,另一种方法是使用返回字典的hotel_info()方法,以便您在模板中执行“info / state”,info / city“等。

我认为你应该考虑一下MVC框架,因为否则你最终会编写自己的框架,这是毫无意义的。

这些是我看过的,它们都很好:

只有Python还有更多。