我正在开发一个Prestashop模块:
我创建了一个OjectModel(DnDPayment.php
)来处理所有Db交互。问题是我无法在FrontController文件中创建此类的新实例。
这是我的FrontController(payments.php
):
<?php
class DnDPaymentsPaymentsModuleFrontController extends ModuleFrontController {
public function initContent() {
parent::initContent();
$this->setTemplate('pay.tpl');
}
public function postProcess() {
if (Tools::isSubmit('send-payment-btn')) {
$bank = Tools::getValue('bank');
$payer = Tools::getValue('payer');
$amount = Tools::getValue('amount');
$reference = Tools::getValue('reference');
if (!$bank || !$payer || !$amount || !$reference)
return $this->context->smarty->assign(array("error" => true));
DnDPayment::savePayment(Tools::getValue('bank'), Tools::getValue('payer'), Tools::getValue('amount'), Tools::getValue('reference'));
return $this->context->smarty->assign(array("ok" => true));
}
}
}
目前,我正在使用savePayment
静态方法,但我真正想要的是创建一个新对象并将其添加到数据库中,如下所示:
....
$payment = new DnDPayment();
$payment->bank = "bah...";
....
....
try {
$payment->add();
} catch(Exception $e) {
//Handle error
}
但如果我尝试使用此代码,则会返回 500错误,仅此而已。似乎问题是new
语句的行。如果我在我的模块文件(dndpayments.php
)中尝试此代码,那么它可以正常工作,但我想在前端控制器中使用它。
这是我的对象模型(DnDPayments.php
),以防万一:
<?php
class DnDPayment extends ObjectModel {
public $id;
public $id_dnd_payments;
public $bank;
public $payer;
public $amount;
public $reference;
public $date_add;
public static $definition_array = array(
'table' => 'dnd_payments',
'primary' => 'id_dnd_payments',
'multilang' => false,
'fields' => array(
'bank' => array('type' => self::TYPE_STRING),
'payer' => array('type' => self::TYPE_STRING),
'amount' => array('type' => self::TYPE_STRING),
'reference' => array('type' => self::TYPE_STRING),
'date_add' => array('type' => self::TYPE_STRING)
)
);
public static function savePayment($bank, $payer, $amount, $reference) {
$logger = new FileLogger(0);
$logger->setFilename(_PS_ROOT_DIR_ . "/log/debug.log");
$logger->logDebug($bank . ' :: ' . $payer . ' :: ' . $amount);
Db::getInstance()->insert('dnd_payments', array(
'bank' => $bank,
'payer' => $payer,
'amount' => $amount,
'reference' => $reference,
'date_add' => date('Y-m-d H:i:s')
));
}
}
如何在控制器中实例化新的ObjectModel并将其保存到数据库?
答案 0 :(得分:1)
在实例化之前,您是否已将此类文件包含在控制器中?如果没有,请加入并重试。
如果您已将类文件包含在控制器中,请检查类的名称和定义范围以及类文件的功能。
答案 1 :(得分:0)
尝试将您的班级包含在控制器文件的开头:
include_once(_PS_MODULE_DIR_ . 'dndpayments/classes/DnDPayment.php');
Prestashop自动加载类,但这不是核心类,因此您必须手动包含它。
祝你好运。