Как формировать ответ в контроллере, при ajax запросе?

Пример:
1) Через ajax отправляются данные для вставки в БД.
2) Принимающий контроллер, подключает модель требуемой базы данных.
3) Принимающий контроллер, вызывает функцию проверки присланных данных.
4) Функция присылает ответ.
5) Если всё хорошо. Отправляем данные на запись.
6) Приходит ответ от функции вставки.
7) Формируем ответ для пользователя.

Примерный код принимающего контроллера:
public function addmailAction()
    {
        $result = array();
        $this->_helper->layout()->disableLayout(); 
        $this->_helper->viewRenderer->setNoRender(true);
        $storage = new Zend_Auth_Storage_Session();
        $storage_data = $storage->read();

        $mail = new Application_Model_Mail();

        $checkMail = $mail->checkMail();
        if ($checkMail) {
            $data['user_id'] = $storage_data->id;
            $insert = $mail->addMail($data);
            if (!$insert) {
                $result['error']['msg'] = "Ошибка при добавлении в базу данных.";
            }
        }
        else {
            $result['error']['msg'] = "Неверные параметры.";
        }

        $output = Zend_Json::encode($result);
        $response = $this->getResponse();
        $response->setBody($output)
            ->setHeader('content-type', 'application/json', true);
    }


Вопрос: Как правильно, и где именно формировать ответы. ['error']['msg'] или ['success'] к примеру.
Ведь не правильно это, если по всему проекту, будут вот такие вот затычки.
  • Вопрос задан
  • 2363 просмотра
Пригласить эксперта
Ответы на вопрос 2
DrNemo
@DrNemo
Я обычно использую объект-интерфейс для таких задач.
типа:
$result = new Item;
...
$result->setError('error message');
$result->setItem(...);
...
return $result->json();
Ответ написан
Комментировать
jakulov
@jakulov
По-хорошему стоит вынести логику в отдельный класс, который и будет вызываться в контроллере, т.е. что-то типа:

// принимаем данные в $data
$mailService = new MailService();
if($mail = $mailService->addMail($data)) {
  $return = ['success' => true];
}
else {
  $return = ['error' => $mailService->getError()];
}

// дальше отдаете ответ


Получаете "тонкий" контроллер, мало кода, обработка ошибок, валидация в отдельном классе.
Еше лучше, если MailService будет получаться через контейнер, это уже сюда framework.zend.com/manual/2.0/en/modules/zend.di.i...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы