[英]How to make a field that is an entity as hidden in the form with SonataAdmin?
I need to add entity field as a hidden in my form In the admin form with sonata I have: 我需要将实体字段添加为隐藏在我的表单中在具有奏鸣曲的管理表单中,我具有:
protected function configureFormFields(FormMapper $formMapper)
{
if ($this->getRoot()->getSubject()->getId()) {
$formMapper
->add('driverNight', 'hidden', array(), array('admin_code' => 'cab.admin.driver'))
->add('monday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Monday', 'value' => '0'))
->add('tuesday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Tuesday', 'value' => '0'))
->add('wednesday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Wednesday', 'value' => '0'))
->add('thursday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Thursday', 'value' => '0'))
->add('friday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Friday', 'value' => '0'))
->add('saturday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Saturday', 'value' => '0'))
->add('sunday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Sunday', 'value' => '0'))
}
Actually, no value in the input (see the inspect image) 实际上,输入中没有值(请参阅检查图像)
How to make the driverNight field as hidden knowing that it is of type entity? 知道它是实体类型,如何使driverNight字段隐藏?
You could use a data transformer as detailed here: data transformer 您可以使用此处详细介绍的数据转换器 : 数据转换器
I suggest that you create a transformer class which transforms the entity
to an int
in the view layer and reverses from int
to entity
in the model layer and the use the addModelTransformer
method in your config form. 我建议您创建一个转换器类,将视图层中的entity
转换为int
并在模型层中将其从int
为entity
,并在配置表单中使用addModelTransformer
方法。
Symfony\\Component\\Form\\DataTransformerInterface
and contains 2 methods transform
and reverseTransform
. 创建模型Transformer类,该类实现Symfony\\Component\\Form\\DataTransformerInterface
并包含2个方法transform
和reverseTransform
。 This class could be constructed by passing 2 arguments: Entity manager and the user entity object that will be transformed to int. 可以通过传递2个参数来构造该类:实体管理器和将转换为int的用户实体对象。 . 。
class DriverToIntTransformer implements DataTransformerInterface {
private $manager;
private $driver;
public function __construct(ObjectManager $manager, $oUser)
{
$this->manager = $manager;
$this->driver = $oUser;
}
public function transform($user)
{
if (null === $user) {
return $this->driver->getId();
}
return $user->getId();
}
public function reverseTransform($driverNumber)
{
if (!$driverNumber) {
return;
}
$oDriver = $this->manager
->getRepository('YourUserBundle:User')
// query for the driver with this id
->find($driverNumber);
if (null === $oDriver) {
throw new TransformationFailedException(sprintf(
'An user with number "%s" does not exist!',
$driverNumber
));
}
return $oDriver;
}
2 call the transform method: 2调用transform方法:
if ($this->getRoot()->getSubject()->getId()) {
$driver = $this->getRoot()->getSubject()->getId();
$em = $this->container->get('doctrine.orm.entity_manager');
$oDriver = $em->getRepository('YourUserBundle:User')->find($driver);
$formMapper
->add('driverNight', 'hidden', array(), array('admin_code' => 'cab.admin.driver'));
$formBuilder = $formMapper->getFormBuilder();
$formBuilder->get('driverNight')->addModelTransformer(new DriverToIntTransformer($em, $oDriver));
$formMapper
->add('monday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Monday', 'value' => '0'));//.....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.