【问题标题】:Get resolver default value from symfony2 custom form type defined as service从定义为服务的 symfony2 自定义表单类型中获取解析器默认值
【发布时间】:2013-12-21 01:45:40
【问题描述】:

假设我将自定义 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]));

谢谢。

【问题讨论】:

    标签: forms symfony options


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 有趣的答案,在表单类型和配置文件中写入这 3 行数据有同样的努力。尽管团队中的新程序员在检查此功能时需要打开更多文件。除了安装新包或初始项目设置外,我也很少检查我的配置 yml。在标记您的答案之前,我仍在等待更轻松的解决方案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    相关资源
    最近更新 更多