2013-10-08 3 views
9

私はこれを使用して、ドキュメントのアノテーションマッピングをマップしません。しかしそれはそれをキャッチしていません。私はそれが古いコードだと知っていますが、誰かがそれを正しくマップする方法を知っています。ありがとう!奇妙なアクセサでアノテーションを使用していないときに、mongodbハッシュに関連する配列マッピングをロードする適切な方法

関連するPR = https://github.com/Payum/PaypalExpressCheckoutNvp/pull/12/files#diff-fcfa75e424ccb89d62449aba21f9db31R49

そしてまた、これに関連する: https://groups.google.com/forum/#!topic/doctrine-user/MdIoOMWA7F4 https://github.com/doctrine/mongodb-odm/issues/421 https://github.com/doctrine/mongodb-odm/issues/453

<?php 

abstract class MongoTest extends BaseMongoTest 
{ 
/** 
* {@inheritDoc} 
*/ 
protected function getMetadataDriverImpl() 
{ 
    $rootDir = realpath(__DIR__.'/../../../../../../../../../'); 
    if (false === $rootDir || false === is_dir($rootDir.'/src/Payum')) { 
     throw new \RuntimeException('Cannot guess Payum root dir.'); 
    } 

$driver = new MappingDriverChain; 
    $xmlDriver = new XmlDriver(
     new SymfonyFileLocator(
      array(
       $rootDir.'/src/Payum/Paypal/ExpressCheckout/Nvp/Bridge/Doctrine/Resources/mapping' 
       => 'Payum\Paypal\ExpressCheckout\Nvp\Bridge\Doctrine\Document', 
       $rootDir.'/examples/Payum/Paypal/ExpressCheckout/Nvp/Examples/Resources/mapping' 
       => 'Payum\Paypal\ExpressCheckout\Nvp\Examples\Document' 
      ), 
      '.mongodb.xml' 
     ), 
     '.mongodb.xml' 
    ); 
    $driver->addDriver($xmlDriver, 'Payum\Paypal\ExpressCheckout\Nvp\Examples\Document'); 
    $driver->addDriver($xmlDriver, 'Payum\Paypal\ExpressCheckout\Nvp\Bridge\Doctrine\Document'); 


    return $driver; 
} 

PaymentDetailドキュメントの値プロパティのない持続性がないので、私は失敗し2つのテストのエラーが出ますexamplesフォルダの下にあります。ここで

は、問題があるためであるBaseModelの奇妙なセッター/ゲッターのようですPaymentDetails

​​

のマッピングおよびスーパー

https://github.com/cordoval/PaypalExpressCheckoutNvp/blob/mongo-tests/examples/Payum/Paypal/ExpressCheckout/Nvp/Examples/Resources/mapping/PaymentDetails.mongodb.xml?pr=%2FPayum%2FPaypalExpressCheckoutNvp%2Fpull%2F12

のマッピングでありますPaymentDetailsによって拡張されました。上記中間ベースクラスからなり、ここで以下である

protected $paymentrequest_nnn_amt = array(); 

    public function getPaymentrequestAmt($n = null) 
    { 
     return $this->get('paymentrequest_nnn_amt', $n); 
    } 

    public function setPaymentrequestAmt($n, $value) 
    { 
     $this->set('paymentrequest_nnn_amt', $value, $n); 
    } 

基底クラスから

/** 
* @param string $property 
* @param bool $n 
* @param bool $m 
* 
* @return mixed 
*/ 
protected function get($property, $n = false, $m = false) 
{ 
    $currentValue = $this->$property; 
    if (false !== $n && false !== $m) { 
     if (null === $n && null === $m) { 
      return $currentValue; 
     } 
     if (array_key_exists($n, $currentValue) && array_key_exists($m,$currentValue[$n]){ 
      return $currentValue[$n][$m]; 
     } 
    } 
    if (null === $n) { 
     return $currentValue; 
    } 
    if (array_key_exists($n, $currentValue)) { 
     return $currentValue[$n]; 
    } 
} 
+0

[Payum \ Payum#50](https://github.com/Payum/Payum/pull/50/files)をご覧ください。私はTokenのドキュメントのための回避策を取り戻しましたが、今でも失敗します。それは簡単なsetter \ getterですcuzをデバッグするほうがよいはずです –

答えて

1

Iが判明し、問題を修正しました。

  • まず、長時間ORMを使用した後、私はnameはモンゴのフィールドで、fieldNameは、プロパティ名(issue)であることを混乱していた:私はに実行したいくつかの問題がありました。
  • 第2に、fieldNameがいずれのプロパティとも一致しない場合、それはただsilently skipped(ORMが例外をスローする)です。なぜその物件が救われなかったのかを知ることは難しかったです。 (issue)。

fixing the mappingの後にすべて正常に機能します。

+0

@ codeord奇妙なアクセサは問題ではありません(: –

関連する問題