codeigniter — контроллеры PHP. Разделение проблем между страницами обслуживания и формами

Я знаю, что есть много споров о том, какой фреймворк 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
}

}
}

Я нашел оба варианта одинаково громоздкими:

  • Вариант 1. Два метода с одинаковым именем для одной и той же функции. Это сделает контроллер труднее читать.
  • Вариант 2: метод, управляемый большим if-else по типу запроса. Это усложнит чтение метода.

Итак, вот вопрос. Как вы справляетесь с этим на практике?

0

Решение

GET / POST — это две разные, но функционально взаимосвязанные вещи.

Это очень распространенный рабочий процесс в веб-приложениях:

  • ПОЛУЧИТЬ запрос сделан, который вызывает запрос для создания формы
  • СООБЩЕНИЕ запрос сделан, который является
    • А) Подтверждено и команда выполнена. Последовательно, клиент перенаправляется на страницу успеха.
    • Б) Не удалось проверить. Последовательно клиент перенаправляется на страницу сбоя (скорее всего, ПОЛУЧИТЬ страница).

Я считаю, что они достаточно различны, чтобы разделить их на разные методы, но достаточно похожи, чтобы хранить в одном контроллере.

Проблема в соглашении об именах. Вы должны четко различать команда и запрос действия и использовать object-verb имена, которые описывают предмет, с которым вы работаете, и что вы делаете с ним.

class TrivialController extends MY_CONTROLLER{

public function askCredentials(){
// Show login form
}

public function verifyCredentials(){
// Login
}

}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]