Поскольку вы должны выполнять этот шаг каждый раз, когда делается запрос, вы можете сохранить полученный, проанализировать и проверить полученный запрос в Zend_Controller_Plugin, который будет запускаться на каждом PreDispatch
всех контроллеров. (Выполняется только в том случае, если ваш XML-запрос стандартизирован) (Если вы используете XMLRPC
, REST
или какой-то стандартный способ для создания запросов к вашему сервису, вы можете посмотреть те модули, встроенные в ZF)
Проверка данных (специфических для действия) может быть выполнена в методе контроллера (который затем вызывается действием (ами), нуждающимся в этом) (если ваши параметры относятся к одному или нескольким действиям этого контроллера) или Вы можете сделать это с помощью шаблонов Factory
и Builder
в случае, если у вас много общих параметров между контроллерами / действиями
// call to the factory
$filteredRequest = My_Param_Factory::factory($controller, $action, $paramsArray) // call the right builder based on the action/controller combination
// the actual Factory
class My_Param_Factory
{
public static function factory($controller, $action, $params)
{
$builderClass = "My_Param_Builder_" . ucfirst($controller) . '_' . ucfirst($action);
$builder = new $builderClass($params);
return $builder->build();
}
}
Затем ваш конструктор вызовет определенные параметры, проверяющие классы на основе потребностей этого конкретного компоновщика (что улучшит возможность повторного использования)
В вашем контроллере, если все необходимые параметры верны, вы передаете обработку правильному методу подходящей модели
$userModel->getUserInfo($id) // for example
Что бы удалить все операции обработки данных из контроллеров, которые должны были бы только проверить, в порядке ли ввод, и затем соответствующим образом выполнить диспетчеризацию.
Сохранить результаты (ошибки или успехи) в переменной, которая будет отправлена в представление
Обработка данных (формат и экранирование (например, замените <на & lt; если они должны быть включены в ответ)), отправьте помощнику представления для построения XML, а затем напечатайте (<code>echo) данные в представлении (который будет ответом для вашего пользователя).
public function getDetailsAction()
{
if ($areRequestParamsValid === true) {
// process data
} else {
// Build specific error message (or call action helper or controller method if error is general)
}
$this->view->data = $result
}