2017-08-31 10 views
0

フックを追跡するためのプレスタショップのソリューションはありますか?特にアクションフックフックがどこで呼び出されているのか、フックが何をしているのかを確認する必要があります。フックの機能を見つけるのは難しいです。彼らはどこにでもいることができます。Prestashopデバッグフック

+0

どのフックが呼び出されているか知りたいですか? – joseantgv

+0

私の店では、DBに二重の行が含まれることがあります。インサートはフック機能にあります。だから、時には2度実行する必要があります。私はいつどこで見つけることができません。 2番目のケースではHOOK :: EXECが見つかりますが、どこに関数があるのか​​わかりません。彼らはいくつかのモジュールになければなりません。 –

答えて

2

すべてのフックの実行は、execHookクラスから実行されます。あなたはこの関数の先頭にデバッグトレースを追加することができます。

public static function exec($hook_name, $hook_args = array(), $id_module = null, $array_return = false, $check_exceptions = true, 
          $use_push = false, $id_shop = null) 
{ 
    $logger = new FileLogger(0); 
    $logger->setFilename(_PS_ROOT_DIR_.'/log/debug.log'); 
    $e = new Exception; 
    $logger->logDebug('Hook '.$hook_name.' called from:'); 
    $logger->logDebug($e->getTraceAsString()); 
    .... 

これは/log/debug.logでデバッグログを作成し、このフックを呼び出すかについての情報を表示します。

あなたがそうするように、この関数をオーバーライドした場合であっても良く;)


また、あなたのDB内のすべてのINSERTをデバッグすることができます。

Dbクラス( /classes/db/Db.php)から q機能でこのコード

protected function q($sql, $use_cache = true) 
{ 
    $logger = new FileLogger(0); 
    $logger->setFilename(_PS_ROOT_DIR_.'/log/sql.log'); 
    $e = new Exception; 
    $logger->logDebug('SQL '.$sql.' executed from:'); 
    $logger->logDebug($e->getTraceAsString()); 
    ... 

を追加します。

+0

@Marcin Jaworskiの回答が編集され、人物を探すのに役立ちます – idnovate