2015-09-06 2 views
3

Я пытаюсь обрабатывать исключения на cakephp 3 при обращении к базе данных.Cakephp 3 выполнить последний запрос

Я бы хотел, чтобы последний запрос выполнялся, когда и исключение отправлено для уведомления по электронной почте администратору, я использую базу данных MySQL, поэтому код ошибки был бы неплохо иметь его, если это возможно.

Это мой код прямо сейчас.

if($this->request->is('post')){ 
    $opciones=$this->request->data; 

    $configsTable = TableRegistry::get('Configs');  

    try{   

    $configsTable->connection()->transactional(function() use($configsTable, $opciones){ 
     foreach ($opciones as $llave => $opcion) { 
     $q = $configsTable->find('all', [ 
      'conditions' => [ 
      'Configs.nombre' => $llave 
      ] 
     ]); 
     $reg = $q->first(); 

     if (empty($reg)) { 
      $data = array(); 
      $data['nombre'] = $llave; 
      $data['valor'] = $opcion; 

      $entity = $configsTable->newEntity($data); 


      if (!$configsTable->save($entity, ['atomic' => false])) { 


      /********trying to catch database error here******/     

      throw new \Exception(__('Error message')); 
      } 

     }else{ 
      $u = $configsTable->updateAll(['valor'=>$opcion], [ 
      'id'=>$reg->id 
      ]); 

      if(!$u){         

      /********trying to catch database error here******/     

      throw new \Exception(__('Error message')); 
      } 
     } 
     } 
    }); 

    $this->Flash->success(__('Ajustes actualizados'),[ 
     'params'=>['class'=>'alert-absolute timed', 'tiempo'=>5] 
    ]); 

    } catch (\PDOException $ex) { 
    $this->Flash->error($ex->getCode().' - '.$ex->getMessage(),[ 
     //'params'=>['class'=>'alert-absolute timed', 'tiempo'=>5] 
    ]); 
    } catch (\Exception $ex){ 
    $this->Flash->error($ex->getMessage(),[ 
     //'params'=>['class'=>'alert-absolute timed', 'tiempo'=>5] 
    ]); 
    } 
} 

Я по-прежнему ищу по кулинарной книге какую-то информацию. Thaks.

ответ

0

Позвольте обработчику ошибок обработать PDOException (что сделано по умолчанию). Вы можете настроить your own error handler, который проверяет тип исключения и отправляет электронную почту в случае PDOException.

Вы можете получить запрос sql с использованием экземпляра исключения как $error->queryString.

Смежные вопросы