2013-02-06 38 views
1

我尝试使用下面的代码Zend框架日志数据库错误

$db = new Zend\Db\Adapter\Adapter(array(
'driver' => $config->database->adapter, 
'database' => $config->database->params->dbname, 
'username' => $config->database->params->username, 
'password' => $config->database->params->password 
)); 

$paypalLog = array(
'transactionId' => 'transactionId', 
'transactionType' => 'transactionType', 
'paymentType' => 'paymentType', 
'orderTime' => 'orderTime', 
'currencyCode' => 'currencyCode', 
'feeAmt' => 'feeAmt', 
'taxAmt' => 'taxAmt', 
'paymentStatus' => 'paymentStatus', 
'pendingReason' => 'pendingReason', 
'reasonCode' => 'reasonCode' 
); 

$writer = new Zend\Log\Writer\Db($db, 'paypal', $paypalLog); 
$logger = new Zend\Log\Logger(); 
$logger->addWriter($writer); 
$logger->info($transactionId, 
    $transactionType, 
    $paymentType, 
    $orderTime, 
    $currencyCode, 
    $feeAmt,   
    $taxAmt, 
    $paymentStatus, 
    $pendingReason, 
    $reasonCode); 
?> 

我不断收到以下错误

Fatal error: Uncaught exception 'Zend\Log\Exception\InvalidArgumentException' with message '$extra must be an array or implement Traversable' in C:\xampp\htdocs\app\library\Zend\Log\Logger.php:236 Stack trace: #0 C:\xampp\htdocs\app\library\Zend\Log\Logger.php(333): Zend\Log\Logger->log(6, '2SH18664DB63910...', 'expresscheckout') #1 C:\xampp\htdocs\app\public\orderconfirm.php(124): Zend\Log\Logger->info('2SH18664DB63910...', 'expresscheckout', 'instant', '2013-02-06T10:4...', 'AUD', '0.52', '0.00', 'Completed', 'None', 'None') #2 {main} thrown in C:\xampp\htdocs\app\library\Zend\Log\Logger.php on line 236 

登录PHP数据从贝宝调用数据库返回任何帮助赞赏。

回答

0

我通过构建包含“额外”信息的数组和发送,进行了这方面的工作。

$data = array(
     'transactionId' => $transactionId, 
     'transactionType' => $transactionType, 
     'paymentType' => $paymentType, 
     'orderTime' => $orderTime, 
     'amt' => $amt, 
     'currencyCode' => $currencyCode, 
     'feeAmt' => $feeAmt, 
     'taxAmt' => $taxAmt, 
     'paymentStatus' => $paymentStatus, 
     'pendingReason' => $pendingReason, 
     'reasonCode' => $reasonCode 
     ); 

    $mapping = array(
     'message' => 'message', 
     'extra' => $data); 

    $writer = new Zend\Log\Writer\Db($db, 'paypal', $paypalLog); 
    $logger = new Zend\Log\Logger(); 
    $logger->addWriter($writer); 
    $logger->info($mapping);  
2

您正在错误地使用记录器。

有它接受两个paramters:

/** 
* @param string $message 
* @param array|Traversable $extra 
* @return Logger 
*/ 
public function info($message, $extra = array()) 
{ 
    return $this->log(self::INFO, $message, $extra); 
} 

你传入$ TRANSACTIONTYPE作为“额外”的字段,是不是probanly数组或对象traverable。

试试这个,数组应转换为日志文件的字符串:

$logger->info(paypalLog); 
// or convert it to a string before logging.. it 
$logger->info(implode(',', $paypalLog)); 
+0

谢谢安德鲁,这让我朝着正确的方向前进 – LJT