内ObjectModel使用:PrestaShopの - 私はPrestaShopのモジュールを開発していますFrontController
そして、私はすべてのDbの相互作用を処理するためにOjectModel(DnDPayment.php
)を作成しました。問題は、FrontControllerファイル内にこのクラスの新しいインスタンスを作成できないことです。
これは(payments.php
)私のFrontControllerです:今のところ
<?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
)でこのコードを試してもOKですが、フロントコントローラーで使用したいのですが。
これは念のために、私のオブジェクトモデル(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をインスタンス化し、それをデータベースに保存することができますか?自動的
include_once(_PS_MODULE_DIR_ . 'dndpayments/classes/DnDPayment.php');
PrestaShopの負荷クラスが、あなたが手動で含まれている必要がありますので、これはコアクラスではありません。
ありがとうございますが、メインモジュールファイルから既に含まれています。 'public static $ definition_array = array('これは間違っていたので、モデルを実際に定義していませんでした) 'public static $ definition = array(' _array'を使わないでください。 – danielrvt