1

私の Moodle プラグインには、次の PHP スクリプト test.php があります。

<?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 です。

前もって感謝します

4

1 に答える 1

1

このMoodleフォーラムで解決策を見つけました。https://moodle.org/mod/forum/discuss.php?d=207445 . クラス http_client は名前空間内にあったため (私がばかげて省略した事実)、例外をエスケープする必要がありました。

したがって:

}catch (\Exception $e) {
            echo "Exception occurred";
 }

\例外 $e の代わりに例外 $e。

于 2016-08-31T04:13:50.747 に答える