9

ドキュメントの非注釈マッピングをマップするためにこれを行っています。しかし、それは追いついていません。古いコードであることは知っていますが、正しくマップする方法を知っている人はいますか? ありがとう!

関連する 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 つのテストが失敗するというエラーが発生します。

PaymentDetails のマッピングは次のとおりです。

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

スーパークラスのマッピング

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 によって拡張された BaseModel の奇妙なセッター/ゲッターが原因のようです。

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];
    }
}
4

1 に答える 1