ドキュメントの非注釈マッピングをマップするためにこれを行っています。しかし、それは追いついていません。古いコードであることは知っていますが、正しくマップする方法を知っている人はいますか? ありがとう!
また、これにも関連しています: 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 のマッピングは次のとおりです。
スーパークラスのマッピング
この問題は、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];
}
}