Со временем я разработал свой собственный фреймворк, и он отлично работает — он легкий, быстрый и, как доказано, может выдерживать приличную нагрузку.
Сейчас я работаю над проектом, который можно описать как интернет-магазин, где у каждого пользователя будет свой поддомен, где его товары будут доступны для продажи.
Моя структура работает, разделяя URL-адрес запроса на / и определяя, что такое контроллер, параметры действий и т. д.
и это прекрасно работает, но что делать с субдоменами?
я изменил свой объект запроса, поэтому, когда я набираю, скажем:
(я добавил SeverAlias *.shop.local)
вот как выглядит мой объект запроса:
DPLS_Request Object
(
[_request] => Array
(
[0] =>
[1] =>
[action] => defaultAction
[controller] => home
)
[_params] => Array
(
)
[_rurl:private] => kodi.shop.local
[_segment] => kodi
[get_params] => Array
(
)
)
так что _segment — это субдомен, и позже я могу использовать его в коде, чтобы проверить его по сравнению с именем пользователя и другими вещами, но у меня возникли концептуальные проблемы еще до этого. моя проблема в том, что моя структура ожидает, что какой-то контроллер и действия будут переданы, и потому что все, что он получает в конце URL-адреса, / он предполагает, что он должен отображать индексную страницу :(
Итак, что делать дальше ... как включить поддомены во всю историю контроллеров / действий mvc?
одно быстрое и грязное решение - изменить часть моего класса запроса:
if($this->_request['controller']==''){
$this->_request['controller'] = DEFAULT_CONTROLLER;
}
if($this->_request['action']==''){
$this->_request['action'] = DEFAULT_ACTION;
}
и обернуть это еще одним if, чтобы проверить, присутствует ли _segment, и если он есть, то назначить контроллеру DEFAULT _SHOP _CONTROLLER, который я определю в файле конфигурации, скажем, «хранилище»
поэтому приведенный выше запрос будет аналогичен вводу http://shop.local/store/ (он будет запущен контроллер 'store' и действие по умолчанию)
что бы вы сделали в этом случае? есть ли «лучшая практика» при работе с поддоменами, контроллерами и действиями?