2009-08-23 2 views
0

Допустим, мой главный контроллер «гостиницы» имеет шаблон для URL, например:Работа с динамическими URLs

// /-название отеля

отели колорадо/осина/

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

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

class hotelController { 
    function state() { 
    } 

    function city() { 
    } 

    function hotel() { 
    } 
} 

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

+0

Вы используете web2py или другую инфраструктуру MVC? –

+0

Я вообще не использую какие-либо фреймворки, но я сделал некоторые простые вещи в Zend/Django/Pylons, я просто ищу общие ответы по программированию, чтобы решить это независимо от языка. –

ответ

1

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

Еще одно преимущество - вам не нужно проверьте, что установлено после/гостиницы/например. Он будет отправлен только новому контроллеру, если есть что-то, что нужно отправить, например, если текущий контроллер не смог обработать весь запрос.

Это не совсем определенно для определенной структуры, но полностью реализовано в Pylons and 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.

Смежные вопросы