或任何有關此事的框架。MVC架構中何處記錄數據庫錯誤
使用Zend Framework 2作爲一個例子,我有以下表類:
<?php
namespace Contact\Model;
use Zend\Db\TableGateway\TableGateway;
use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Log\Logger;
class UserContactsTable extends AbstractTableGateway
{
protected $tableGateway;
/**
*
* @var \Zend\Log\Logger Instance
*/
protected $logger;
public function __construct(TableGateway $tableGateway, Logger $logger)
{
$this->tableGateway = $tableGateway;
$this->logger = $logger;
}
/**
* Save a contact
*
* @param \Sms\Model\UserContact $userContact
*/
public function saveUserContact(UserContact $userContact)
{
$data = array(
'user_id' => $userContact->user_id,
'contact_id' => $userContact->contact_id
);
try {
$this->tableGateway->insert($data);
} catch (\Exception $e) {
//log
$this->logger->crit($omeErrMsg);
}
}
}
?>
我應該記錄在這裏?我應該將記錄器綁定到表類嗎? 如果插入失敗,我應該讓saveUserContact函數拋出一個異常並捕獲控制器並在那裏登錄?
什麼是最佳實踐?
我最初的想法是創建一個包含一些常量錯誤消息的類,例如記錄器在表類中使用的插入和更新失敗,但我不確定這裏的正確過程是什麼。
這實際上並不僅限於PHP或Zend Framework 2,而恰恰是我正在使用的語言。
我擔心這將是我的記錄器對象傳遞給我所有的表格,然後在那裏記錄而不是在控制器中的答案。該死的。感謝澄清。 –
絕對同意@RobMasters。如果您使用經典的多層架構:Web MVC - 服務層 - 持久層,那麼您的數據庫持久層應與日誌邏輯解耦。正如RobMasters所建議的那樣,我會在控制器級別捕獲異常,然後將處理委派給根據異常類型的日誌服務,根據必要的邏輯記錄必要的信息(電子郵件,寫入文件,另一個專用數據庫......) – yechabbi