Symfony 为什么Sonata Admin没有';不保存我的自定义原则字段?
我写了有史以来最简单的货币类:Symfony 为什么Sonata Admin没有';不保存我的自定义原则字段?,symfony,doctrine-orm,doctrine,sonata-admin,symfony-sonata,Symfony,Doctrine Orm,Doctrine,Sonata Admin,Symfony Sonata,我写了有史以来最简单的货币类: class Money { private $amount; private $currency; // getters and setters here public function toArray() { return ['amount' => $this->amount, 'currency' => $this->currency]; } } 然后我创
class Money
{
private $amount;
private $currency;
// getters and setters here
public function toArray() {
return ['amount' => $this->amount, 'currency' => $this->currency];
}
}
然后我创建了Doctrine自定义类型,它扩展了Sonata的JsonType:
class MoneyType extends JsonType
{
/**
* @param Money $value
* @param AbstractPlatform $platform
* @return mixed|null|string
*/
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return parent::convertToDatabaseValue($value->toArray(), $platform);
}
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return new Money(parent::convertToPHPValue($value, $platform));
}
public function getName()
{
return 'money';
}
}
然后我将其添加到我的config.yml中:
doctrine:
dbal:
types:
json: Sonata\Doctrine\Types\JsonType
money: Enl\CurrencyBundle\Doctrine\Type\MoneyType
然后我为这个数据块添加了表单类型:
class MoneyType extends AbstractType
{
// Some trivial getters and setters for dependencies here
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'enl_money';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults([
'currencies' => $this->getPossibleCurrencies(),
'data_class' => 'Enl\CurrencyBundle\Model\Money'
]);
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('currency', 'choice', ['choices' => $options['currencies'], 'required' => true])
->add('amount', 'number', ['required' => true]);
}
public function getParent()
{
return 'form';
}
}
然后我将字段添加到我的模型中:
/**
* @var Money
* @ORM\Column(type="money", nullable=true)
*/
protected $price;
最后是我的奏鸣曲管理表:
$form
->with('editor.dish', ['class' => 'col-md-8'])
->add('price', 'enl_money')
// blah-blah-blah
问题是Sonata Admin没有保存表单值
我添加了var_dump($object);到Admin::update()方法-新值在对象中。
之后,我创建了简单测试:
$dish = new Dish();
$dish->setPrice(new Money(7000, "BYR"));
$em = $this->getContainer()->get('doctrine.orm.entity_manager');
$em->persist($dish);
$em->flush();
它起作用了!我应该在Admin类中更改什么才能使其正常工作?即使使用sonata,您也必须遵循symfony文档来创建和使用自定义类型。我确实遵循这个医生。我有自定义表单类型和自定义条令类型。一切看起来都正常(表单类型定义正确),并且在readok上工作(当我通过PhpMyAdmin将json粘贴到列中时,会填充表单小部件)。问题出在奏鸣曲结构的某个地方。或者,这是一个错误。