繁体   English   中英

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

[英]How to make a field that is an entity as hidden in the form with SonataAdmin?

我需要将实体字段添加为隐藏在我的表单中在具有奏鸣曲的管理表单中,我具有:

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'))

}

实际上,输入中没有值(请参阅检查图像)

HTML中的检查字段

知道它是实体类型,如何使driverNight字段隐藏?

您可以使用此处详细介绍的数据转换器数据转换器

我建议您创建一个转换器类,将视图层中的entity转换为int并在模型层中将其从intentity ,并在配置表单中使用addModelTransformer方法。

  1. 创建模型Transformer类,该类实现Symfony\\Component\\Form\\DataTransformerInterface并包含2个方法transformreverseTransform 可以通过传递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调用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