システムを円滑に稼働させるためには、システムの障害に効果的に対処する必要があります。 CakePHP にはデフォルトのエラー トラップが付属しており、エラーが発生するとそれを出力してログに記録します。 Exceptions をキャッチするために、この同じエラー ハンドラーが使用されます。
エラー ハンドラは、debug が true の場合はエラーを表示し、debug が false の場合はエラーをログに記録します。 CakePHP には多数の例外クラスがあり、組み込みの例外処理により、キャッチされなかった例外がキャプチャされ、有用なページがレンダリングされます。
エラーと例外は、ファイル configapp.php で設定できます。エラー処理では、アプリケーションに合わせてエラー処理を調整できるいくつかのオプションを受け入れます -
Option | Data Type | Description |
---|---|---|
errorLevel | int | The level of errors you are interested in capturing. Use the built-in php error constants, and bitmasks to select the level of error you are interested in. |
trace | bool | Include stack traces for errors in log files. Stack traces will be included in the log after each error. This is helpful for finding where/when errors are being raised. |
exceptionRenderer | string | The class responsible for rendering uncaught exceptions. If you choose a custom class, you should place the file for that class in src/Error. This class needs to implement a render() method. |
log | bool | When true, exceptions + their stack traces will be logged to CakeLogLog. |
skipLog | array | An array of exception class names that should not be logged. This is useful to remove NotFoundExceptions or other common, but uninteresting logs messages. |
extraFatalErrorMemory | int | Set to the number of megabytes to increase the memory limit by, when a fatal error is encountered. This allows breathing room to complete logging or error handling. |
キャッチされなかった例外のレンダリングを担当するクラス。 カスタム クラスを選択した場合は、そのクラスのファイルを
src/Errorに配置する必要があります。このクラスは、render() メソッドを実装する必要があります。
<?php use Cake\Http\Middleware\CsrfProtectionMiddleware; use Cake\Routing\Route\DashedRoute; use Cake\Routing\RouteBuilder; $routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('/exception/:arg1/:arg2', ['controller'=>'Exps','action'=>'index'], ['pass' => ['arg1', 'arg2']]); $builder->fallbacks(); });
CakeLogLog に記録されます。
<?php namespace App\Controller; use App\Controller\AppController; use Cake\Core\Exception\Exception; class ExpsController extends AppController { public function index($arg1,$arg2) { try{ $this->set('argument1',$arg1); $this->set('argument2',$arg2); if(($arg1 > 1 || $arg1 > 10) || ($arg2 10)) throw new Exception("One of the number is out of range [1-10]."); } catch(\Exception $ex){ echo $ex->getMessage(); } } } ?>
次のコードに示すように、config/routes.php ファイルを変更します。 config/routes.php
src/Controller/ExpsController.php に
This is CakePHP tutorial and this is an example of Passed arguments.<br> Argument-1: =$argument1?><br> Argument-2: =$argument2?><br>
ファイルを作成します。
コントローラー ファイルに次のコードをコピーします。
src/Template にディレクトリ Exps を作成し、そのディレクトリの下に、index.php という名前の View ファイルを作成します。そのファイルに次のコードをコピーします。 src/Template/Exps/index.php 次の URL にアクセスして、上記の例を実行します。 http://localhost/cakephp4/Exception/5/0 出力 実行すると、次の出力が表示されます。
以上がCakePHP のエラーと例外処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。