浏览代码

Added sonata_type_model_hidden form type

Andrej Hudec 11 年之前
父节点
当前提交
288c261a67
共有 3 个文件被更改,包括 117 次插入0 次删除
  1. 66 0
      Form/Type/ModelHiddenType.php
  2. 4 0
      Resources/config/form_types.xml
  3. 47 0
      Tests/Form/Type/ModelHiddenTypeTest.php

+ 66 - 0
Form/Type/ModelHiddenType.php

@@ -0,0 +1,66 @@
+<?php
+
+/*
+ * This file is part of the Sonata package.
+ *
+ * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+
+namespace Sonata\AdminBundle\Form\Type;
+
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\OptionsResolver\Options;
+use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+
+use Sonata\AdminBundle\Form\DataTransformer\ModelToIdTransformer;
+
+/**
+ * This type define a standard hidden field, that stored id to a object
+ *
+ * @author Andrej Hudec <pulzarraider@gmail.com>
+ *
+ */
+class ModelHiddenType extends AbstractType
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function buildForm(FormBuilderInterface $builder, array $options)
+    {
+        $builder
+            ->addViewTransformer(new ModelToIdTransformer($options['model_manager'], $options['class']), true)
+        ;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function setDefaultOptions(OptionsResolverInterface $resolver)
+    {
+        $resolver->setDefaults(array(
+            'model_manager'     => null,
+            'class'             => null,
+        ));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getParent()
+    {
+        return 'hidden';
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getName()
+    {
+        return 'sonata_type_model_hidden';
+    }
+}

+ 4 - 0
Resources/config/form_types.xml

@@ -27,6 +27,10 @@
             <tag name="form.type" alias="sonata_type_model_reference" />
         </service>
 
+        <service id="sonata.admin.form.type.model_hidden" class="Sonata\AdminBundle\Form\Type\ModelHiddenType">
+            <tag name="form.type" alias="sonata_type_model_hidden" />
+        </service>
+
         <service id="sonata.admin.form.type.array" class="Sonata\AdminBundle\Form\Type\ImmutableArrayType">
             <tag name="form.type" alias="sonata_type_immutable_array" />
         </service>

+ 47 - 0
Tests/Form/Type/ModelHiddenTypeTest.php

@@ -0,0 +1,47 @@
+<?php
+
+/*
+ * This file is part of the Sonata package.
+ *
+ * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sonata\AdminBundle\Tests\Form\Type;
+
+use Sonata\AdminBundle\Form\Type\ModelHiddenType;
+
+use Symfony\Component\Form\Tests\Extension\Core\Type\TypeTestCase;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+
+class ModelHiddenTypeTest extends TypeTestCase
+{
+    public function testGetDefaultOptions()
+    {
+        $type = new ModelHiddenType();
+        $modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
+        $optionResolver = new OptionsResolver();
+
+        $type->setDefaultOptions($optionResolver);
+
+        $options = $optionResolver->resolve(array('model_manager' => $modelManager, 'class' => '\Foo'));
+
+        $this->assertInstanceOf('Sonata\AdminBundle\Model\ModelManagerInterface', $options['model_manager']);
+        $this->assertEquals($modelManager, $options['model_manager']);
+        $this->assertEquals('\Foo', $options['class']);
+    }
+
+    public function testGetName()
+    {
+        $type = new ModelHiddenType();
+        $this->assertEquals('sonata_type_model_hidden', $type->getName());
+    }
+
+    public function testGetParent()
+    {
+        $type = new ModelHiddenType();
+        $this->assertEquals('hidden', $type->getParent());
+    }
+}