Работа с динамическими URL - PullRequest
0 голосов
/ 23 августа 2009

Допустим, у моего основного контроллера 'hotels' есть шаблон для URL, например:

/ / / осина / отель имя-отели колорадо /

Как мне запрограммировать мой контроллер (имейте в виду, что я все еще изучаю MVC) для обработки этой переменной?

Я знаю, что, возможно, мне нужно проверить, задано ли что-либо после / hotels /, иначе покажу страницу отелей по умолчанию. Если задано состояние, покажите страницу состояния и т. Д. С названием города и отеля.

class hotelController {
    function state() {
    }

    function city() {
    }

    function hotel() {
    }
}

Должен ли я иметь 3 отдельных метода для каждого из них? Любой совет приветствуется.

Ответы [ 2 ]

1 голос
/ 23 августа 2009

Обычно это решается с помощью Object Dispatch. Вы также можете создать вложенные контроллеры, чтобы справиться с этим. Преимущество состоит в том, что вы можете следовать основному принципу ООП, а именно инкапсуляции, поскольку вы группируете все функции, относящиеся только к отелям, как правило, в контроллере отеля (например, добавляя новый)

Еще одним преимуществом является то, что вам не нужно проверять, например, что установлено после / 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
0 голосов
/ 23 августа 2009

Совершенно справедливо иметь отдельные методы для получения названия штата, города и отеля.

Альтернативой, если ваш язык шаблонов поддерживает это, является наличие метода hotel_info (), который возвращает словарь, так что вы в шаблоне делаете "info / state", info / city "и т. Д.

Тем не менее, я думаю, что вы должны изучить MVC-фреймворк, потому что в противном случае вы просто напишите свой собственный, что бессмысленно.

Это те, на которые я смотрел, все они хороши:

Для Python есть множество других возможностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...