2017-01-05 23 views
1

内ObjectModel使用:PrestaShopの - 私はPrestaShopのモジュールを開発していますFrontController

enter image description here

そして、私はすべての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の負荷クラスが、あなたが手動で含まれている必要がありますので、これはコアクラスではありません。

答えて

0

は、あなたのコントローラファイルの先頭にあなたのクラスを含めるようにしてください。

幸運。

+0

ありがとうございますが、メインモジュールファイルから既に含まれています。 'public static $ definition_array = array('これは間違っていたので、モデルを実際に定義していませんでした) 'public static $ definition = array(' _array'を使わないでください。 – danielrvt

1

インスタンス化する前に、このクラスファイルをコントローラに含めましたか?そうでない場合は、それを含めて再試行してください。

すでにクラスファイルをコントローラに組み込んでいる場合は、クラスファイルの定義だけでなく、クラス名やクラスの機能も確認してください。

関連する問題