从定义为服务的symfony2自定义表单类型中获取解析程序默认值

时间:2013-12-21 01:45:41

标签: forms symfony options

假设我将自定义symfony2表单类型定义为服务,我想在我的控制器中以此自定义表单类型获取我定义的默认值。

例如,我想根据此自定义表单类型中选择的值过滤我的数据。

我已经检查了AbstractType类,但是没有函数来获取从我的自定义表单类型定义的解析器默认值。

我不想使用实体来存储这个简单的数据,它只是3行数据。

<?php 

namespace Jariff\AdminBundle\Form\CustomType;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class JariffSalutationType extends AbstractType
{
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'empty_value' => '---',
            'choices'     => array(
                'Mr.'  => 'Mr.',  
                'Mrs.' => 'Mrs.', 
                'Ms.'  => 'Ms.',
            )));
    }

    public function getParent()
    {
        return 'choice';
    }

    public function getName()
    {
        return 'jariff_salutation';
    }
}

服务定义

services:

    jariff_type_salutation:

        class: Jariff\AdminBundle\Form\CustomType\JariffSalutationType

        tags:

            - { name: form.type, alias: jariff_salutation }

使用示例

$salutation = $this->get('jariff_type_salutation');
$entities = $em->getRepository('JariffMemberBundle:Member')->findBy(array('salutation' => $salution[1]));

感谢。

1 个答案:

答案 0 :(得分:0)

不直接。您应该在config.yml中将称呼选项定义为参数(salutations),并将此参数传递给this recipe后的表单类型。然后,在您的控制器中,使用(按照您的示例用法)检索选择数组:

$this->container->getParameter('salutations')[1];

您还可以在表单类型中添加public static function getSalutations(),返回选择数组并在setDefaultOptions中调用它:

$resolver->setDefaults(array(
    'empty_value' => '---',
    'choices'     => self::getSalutations()
));