Я использую этот кусок кода в Javascript. Мудрые вещи организованы в виде организации MVC, поэтому вещи, влияющие на один модуль, обычно группируются вместе. В общем, я также создаю отдельный модуль для отдельной модели, но в некоторых случаях вы можете отклониться от этого принципа.
Моя установка с Symfony сзади и простым jquery на фронте. Есть некоторые подходы, которые автоматизируют эту часть, например http://javascriptmvc.com/,. Я считаю, что она слишком ограничена во многих частях. Вот мой рабочий процесс для интеграции php и jquery.
PHP
Выполнить кусок кода и обернуть его внутри блока try / catch. Таким образом, сообщения об ошибках могут распространяться на внешний интерфейс. Этот метод помогает в этом отношении преобразовать исключения в читаемую ошибку. (для отладки из JSON).
try {
//... execute code .. go about your buisness..
$this->result = "Moved " . count($files) . " files ";
// result can be anything that can be serialized by json_encode()
} catch (Exception $e) {
$this->error = $e->getMessage() . ' l: ' . $e->getLine() . ' f:' . $e->getFile();
// return an error message if there is an exception. Also throw exceptions yourself to make your life easier.
}
// json response basically does something like echo json_encode(array("error" => $this->error, "result" => $this->result))
return $this->jsonResponse();
Для обработки ошибок я часто использую это для разбора ошибок.
public function parseException($e) {
$result = 'Exception: "';
$result .= $e->getMessage();
$trace = $e->getTrace();
foreach (range(0, 10) as $i) {
$result .= '" @ ';
if (!isset($trace[$i])) {
break;
}
if (isset($trace[$i]['class'])) {
$result .= $trace[$i]['class'];
$result .= '->';
}
$result .= $trace[$i]['function'];
$result .= '(); ';
$result .= $e->getFile() . ':' . $e->getLine() . "\n\n";
}
return $result;
}
Сторона Javascript
/**
* doRequest in an ajax development tool to quickly execute data posts.
* @requires jQuery.log
* @param action (string): url for the action to be called. in config.action the prefix for the url can be set
* @param data (object): data to be send. eg. {'id':5, 'attr':'value'}
* @param successCallback (function): callback function to be executed when response is success
* @param errorCallback (function): callback function to be executed when response is success
*/
jQuery.doRequest = function (action, data, successCallback, errorCallback) {
if (typeof(successCallback) == "undefined") {
successCallback = function(){};
}
if (typeof(errorCallback) == "undefined") {
errorCallback = function(data ){
alert(data.error);
};
}
jQuery.log(action);
jQuery.post(action, data, function (data, status)
{
jQuery.log(data);
jQuery.log(status);
if (data.error !== null || status != 'success') {
// error handler
errorCallback(data);
} else {
successCallback(data);
}
},'json');
};
Примечание: обратные вызовы ошибок очень хороши, если объединить их с чем-то вроде pNotify