Некоторые исключения не ловятся

Я нахожусь в процессе создания простого API. у меня есть index.php файл, через который проходят все запросы к API. index.php обрабатывает параметры запроса, чтобы определить, какой контроллер и какое действие использовать. Все это завернуто в try/catch заблокировать, чтобы я мог throw new Exception() всякий раз, когда мне нужно сгенерировать сообщение об ошибке на стороне клиента. Это работает, как и ожидалось, но теперь я создал пользовательский класс, который обрабатывает регистрацию пользователей и вход в систему. В рамках действия регистрации я проверяю, существует ли имя пользователя, переданное из клиентского приложения, в базе данных, если оно есть, я throw new Exception('Username already exists!'), Тем не менее, это не пойман моим catch, Вместо этого я получаю нормальный Fatal error: uncaught exception сообщение. Вот мой код для index.php

include_once 'models/UserItem.php';

try {

$enc_request = $_REQUEST['enc_request'];

$app_id = $_REQUEST['app_id'];
if( !isset($applications[$app_id]) ) {
throw new Exception('Application does not exist!');
}$params = json_decode(trim(mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $applications[$app_id], base64_decode($enc_request), MCRYPT_MODE_ECB )));
if( $params == false || isset($params->controller) == false || isset($params->action) == false ) {
throw new Exception('Request is not valid');
}

$params = (array) $params;

$controller = ucfirst(strtolower($params['controller'])); //User$action = strtolower($params['action']).'Action'; //registerAction

if( file_exists("controllers/{$controller}.php") ) {
include_once "controllers/{$controller}.php";
} else {
throw new Exception('Controller is invalid.');
}$controller = new $controller($params);

if( method_exists($controller, $action) === false ) {
throw new Exception('Action is invalid.');
}

$result['data'] = $controller->$action();
$result['success'] = true;

} catch( Exception $e ) {
$result = array();
$result['success'] = false;
$result['errormsg'] = $e->getMessage();
}

Параметры, отправленные на запрос, находятся в массиве, например:

array(
'controller' => 'user',
'action' => 'register',
'username' => $_POST['username'],
'userpass' => $_POST['userpass']
);

Код в index.php затем вызывает registerAction() в моем user controller который:

public function registerAction() {
$user = new UserItem();
$user->username = $this->_params['username'];
$user->password = $this->_params['userpass'];

$user->user_id = $user->save();

return $user->toArray();
}

Этот код затем вызывает метод save в моем UserItem model который:

public function save() {
$db = new Database();
$db->query('select * from users where username = :user');
$db->bind(':user', $this->username);
$r = $db->single();

if ( $r ) {
throw new Exception('Username already exists! Please choose another.');
}

else {
$db->query('insert into users(username, password) values(:username, :password)');
$db->bind(':username', $this->username);
$db->bind(':password', $this->password);

$r = $db->execute();

$user_array = $this->toArray();

if ( !$r ) {
throw new Exception('There was a problem creating your account. Please try again later.');
}
}

return $db->lastInsertId();

}

Сервер выдает исключение, он просто не перехватывается должным образом. Кто-нибудь видит что-то, что я сделал здесь не так в отношении try / catch?

Спасибо

0

Решение

здесь вы бросили исключение, но вы не поймали исключение. Чтобы реализовать это, вы должны реализовать внутри блока try / catch для обработки перехваченного исключения. Вот пример для реализации попробуйте.

try{
$user->user_id = $user->save();
}catch(Exception $e){
echo "caught Exception :".$->getMessage();
}

Я надеюсь, что это решит вашу проблему. благодарю вас.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector