简体   繁体   English

如何使用SonataAdmin将隐藏为实体的字段制成表单?

[英]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) 实际上,输入中没有值(请参阅检查图像)

HTML中的检查字段

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并在模型层中将其从intentity ,并在配置表单中使用addModelTransformer方法。

  1. Create the model Transformer class which implements Symfony\\Component\\Form\\DataTransformerInterface and contains 2 methods transform and reverseTransform . 创建模型Transformer类,该类实现Symfony\\Component\\Form\\DataTransformerInterface并包含2个方法transformreverseTransform 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM