У меня есть следующий PHP-скрипт test.php в моем плагине Moodle:
<?php
include('lib/httpful/httpful.phar');
try{
$response = \Httpful\Request::post($uri)
->body($requestbody)
->send();
}catch (Exception $e) {
echo "Exception occurred";
}
?>
Всякий раз, когда возникает исключение, текст «Возникло исключение» отображается, как и ожидалось.
Затем я переместил код в функцию в классе classes \ http_client.php. Таким образом:
class http_client{
public function doPost($uri, $requestbody){
try{
$response = \Httpful\Request::post($uri)
->body($requestbody)
->send();
}catch (Exception $e) {
echo "Exception occurred";
}
}
}
Теперь я пытаюсь вызвать из test.php:
$client = new http_client();
$client->doPost($uri, $requestbody);
Исключения больше не перехватываются, а трассировка стека отображается в браузере.
Я должен упомянуть, что это происходит только в Moodle. Вне Moodle класс http_client работает нормально, блок catch выполняется.
Мои настройки: Moodle 3.0.1+ (сборка: 20151223), PHP 5.5.12, Apache 2.4.9.
заранее спасибо
Я нашел решение на этом форуме Moodle. https://moodle.org/mod/forum/discuss.php?d=207445. Так как класс http_client находился в пространстве имен (факт, который я глупо пропустил), мне пришлось избежать исключения.
Таким образом:
}catch (\Exception $e) {
echo "Exception occurred";
}
\ Exception $ e вместо Exception $ e.
Других решений пока нет …