Silex, похоже, захватывает исключения, брошенные в любом месте приложения. Моя проблема заключается в том, что у меня есть класс user_db_interface, который я использую для передачи/получения пользовательских данных из моей базы данных, которые в основном игнорируются после исключения исключения.Ищет переопределение исключения Silex
Например, если у меня есть повторяющаяся запись электронной почты пользователя, которая генерирует исключение PDOException, вместо того, чтобы обрабатывать это исключение в моем классе, я должен добавить закрытие обработки ошибок вне моего класса. Я предпочел бы иметь дело с исключением изнутри, чтобы я мог действовать в этом исключении и продолжить свой сценарий.
Любые такие вещи, как исключение или обход?
Вот пример:
###### PROVIDER REG #######
// I'M LOADING DOCTRINE "NATURALLY" AND NOT REGISTERING IT WITH $APP IN HOPES OF
// AVOIDING THE EXCEPTION HIJACKING.
################################################################### LOAD DOCTRINE NATURAL
require 'vendor/Doctrine/Common/ClassLoader.php';
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', __DIR__ . '/../vendor');
$classLoader->register();
$connectionOptions = array(
'driver' => 'pdo_mysql',
'dbname' => 'MY_DB',
'host' => 'localhost',
'password' => 'MY_PASS',
'user' => 'MY_USER',
);
$driver = new \Doctrine\DBAL\Driver\PDOMySql\Driver;
$connection = new \Doctrine\DBAL\Connection($connectionOptions, $driver);
###################################################################### LOAD MY EXTENSION
$app['autoloader']->registerNamespaces(array('TableTrackPro' => __DIR__,));
$app->register(new TableTrackPro\ClientDBInterfaceExtension(),array('app'=>$app));
$app['client_db_interface']->set_connection($connection);
##################################################
##################################################
################################################# MY DB INTERFACE CLASS (stripped for clarity)
namespace TableTrackPro;
class ClientDBInterface{
private $_connection;
public function set_connection($connection){
$this->_connection = $connection;
}
public function insert_client($clientInfo){
// SET RETURN OBJECT
$returnObject['status'] = 'ok'; // default return status
$returnObject['message'] = false;
// SANITIZE CLIENT INFO ETC...
// THIS IS WHERE I WOULD LIKE TO HANDLE MY OWN EXCEPTIONS
try{
$this->_connection->insert('clients', $clientInfo);
}catch(PDOException $e){
// HANDLE EXCEPTION HERE
}
return json_encode($returnObject);
}
#### END CLASS #####
### CONTROLLERS ####
$app->post('/postNewClient', function() use($app){
$clientInfo = $_POST;
$returnObject = $app['client_db_interface']->insert_client($clientInfo);
return json_encode($returnObject); // <-- I handle this object with javascript via an AJAX call
});
Вместо обработки PDOException в моем классе, так что я могу вернуть данные, как я хочу, я должен добавить обработчик ошибок в области контроллера как:
$app->error(function (\Exception $e, $code) {
// error handling code, I'd now have to handle any client-db specific errors outside of my client_db class...
});
Я бы хотел этого избежать, потому что если обработка исключений была внутренней для класса client_db, я бы знал, что ошибка также была специфичной для этого действия, и мне не пришлось бы писать парсер ошибок.
Трудно сказать, где вы пытаетесь поймать ошибку. Можете ли вы показать минимальный пример с 'app.php' и' MyClass.php' и объяснить, где вы хотите поймать ошибку? – igorw
@igorw, я добавил небольшой пример к вопросу выше. Дайте мне знать, если это поможет. –