Я знаю, что есть много споров о том, какой фреймворк PHP является лучшим, и это не поток по этому поводу;). Этот поток рассказывает о том, как разработчики справляются с разделением интересов, принадлежащих контроллеру.
В инфраструктуре MVC контроллер будет обслуживать страницы (получать) и принимать отправку формы (отправлять). Тем не менее, я обнаружил, что даже тривиальный контроллер может быть трудно понять.
В следующем примере CodeIgniter:
class TrivialController extends MY_CONTROLLER{
public function login(){
//Load a view containing a login form
}
public function login_p(){
//Load user model + login
//Success / Faillure view
}
}
или же
class TrivialController extends MY_CONTROLLER{
public function login(){
if(GET){
//Load a view containing a login form
} else if (POST) {
//Load user model + login
//Success / Faillure view
}
}
}
Я нашел оба варианта одинаково громоздкими:
if-else
по типу запроса. Это усложнит чтение метода.Итак, вот вопрос. Как вы справляетесь с этим на практике?
GET / POST — это две разные, но функционально взаимосвязанные вещи.
Это очень распространенный рабочий процесс в веб-приложениях:
Я считаю, что они достаточно различны, чтобы разделить их на разные методы, но достаточно похожи, чтобы хранить в одном контроллере.
Проблема в соглашении об именах. Вы должны четко различать команда и запрос действия и использовать object-verb
имена, которые описывают предмет, с которым вы работаете, и что вы делаете с ним.
class TrivialController extends MY_CONTROLLER{
public function askCredentials(){
// Show login form
}
public function verifyCredentials(){
// Login
}
}
Других решений пока нет …