首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >向Symfony2传递附加参数的问题形成$options格式

我试图在Symfony 2.6.1中向我的表单类型传递一个额外的选项,如下(FabricanteForm.php)所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
            ->add('nombre', 'text')
            ->add('direccion', 'textarea')
            ->add('telefono', 'text', array(
                'required' => TRUE,
                'trim' => TRUE,
            ))
            ->add('fax', 'text', array(
                'required' => FALSE,
            ))
            ->add('correo', 'email', array(
                'required' => FALSE,
            ));

    if ($options['isFabricante'] !== null)
    {
        $builder->add('pais', 'text');
    }
    else
    {
        $builder->add('pais', 'entity', array(
            'class' => 'AppBundle:Pais',
            'property' => 'nombre',
            'query_builder' => function (EntityRepository $er) {
                return $er->createQueryBuilder('qb')
                          ->where('qb.activo = :activoValue')
                          ->setParameter('activoValue', true);
            },
            'mapped' => FALSE,
            'expanded' => FALSE,
            'multiple' => TRUE,
        ));
    }
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setOptional(array(
        'isFabricante',
    ));

    $resolver->setDefaults(array(
        'data_class' => 'Sencamer\AppBundle\Entity\FabricanteDistribuidor',
        'intention' => 'fabricante',
        'isFabricante' => null
    ));
}

然后,我在控制器上创建如下表单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$entityPais = new Entity\Pais();
$formPaisesDistribuidor = $this->createForm(new Form\PaisesForm(), $entityPais, array('isFabricante' => null));
$formPaisesFabricante = $this->createForm(new Form\PaisesForm(), $entityPais, array('isFabricante' => true));

但我发现了一个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
The option "isFabricante" does not exist. Known options are: "action", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_provider", "csrf_token_id", "csrf_token_manager", "data", "data_class", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "intention", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "max_length", "method", "pattern", "post_max_size_message", "property_path", "read_only", "required", "translation_domain", "trim", "validation_groups", "virtual".

这是在Form Type上设置额外参数的正确方法吗?这是重用表单的最佳方式吗?(您可能会注意到,$formPaisesDistribuidor$formPaisesFabricante之间唯一的区别是pais字段类型,第一个是实体,第二个只是文本)

有什么帮助吗?建议?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-30 21:15:13

引用Turdaliev关于$options不被用于他想要的东西的观点--我不同意,你绝对可以用它。Symfony的文档展示了这两种方式。

下面是将实体管理器传递给options数组的Symfony示例:

using#使用-the-转换器

下面是另一个Symfony示例,将选项传递给构造函数:

type.html#creating-your-field-type-as-a-service

查看Symfony形成最佳实践,它们不会告诉您首选哪种方法,因此您可以自己决定。

我喜欢将$options数组用于简单的布尔flags...since --它们是选项。另外,如果您有几个字段,其中一些是可选的,另一些是必需的,则不需要处理构造函数参数排序问题。

至于你为什么会收到这个错误,我不完全确定。在Symfony 2.6中,setOptional()现在是setDefined()。您仍然可以使用旧的函数,但它是不推荐的,并将在3.0中删除。此外,如果只传递一个选项,则不再需要传递数组。您也不必在setDefaultOptions()中设置它

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefined('isFabricante');

    $resolver->setDefaults(array(
        'data_class' => 'Sencamer\AppBundle\Entity\FabricanteDistribuidor',
        'intention'  => 'fabricante',
    ));
}
票数 2
EN

Stack Overflow用户

发布于 2014-12-30 17:33:37

正如您从异常中看到的那样,$options参数不用于您所使用的对象。因此,不必将自定义选项传递给Symfony的标准$options参数,您可以为FabricanteForm类创建自定义构造函数。以下是如何进行所有这些工作的示范:

PraisesType

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace School\CoreBundle\Form\Type;


use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class PraisesType extends AbstractType
{

private $options;

public function __construct($options)
{
    $this->options = $options;
}

public function buildForm(FormBuilderInterface $builder, array $options)
{
        $builder
            ->add('nombre', 'text')
            ->add('direccion', 'textarea')
            ->add('telefono', 'text', array(
            'required' => TRUE,
                'trim' => TRUE,
            ))
            ->add('fax', 'text', array(
                'required' => FALSE,
            ))
            ->add('correo', 'email', array(
                'required' => FALSE,
            ));

        if ($this->options['isFabricante'] !== null)
        {
            $builder->add('pais', 'text');
        }
        else
        {
            $builder->add('pais', 'entity', array(
                'class' => 'AppBundle:Pais',
                'property' => 'nombre',
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('qb')
                        ->where('qb.activo = :activoValue')
                        ->setParameter('activoValue', true);
                },
                'mapped' => FALSE,
                'expanded' => FALSE,
                'multiple' => TRUE,
            ));
        }
    }


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

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    $entityPais = new Entity\Pais();
    $formPaisesDistribuidor = $this->createForm(new Form\PaisesType(array('isFabricante' => null)), $entityPais);
    $formPaisesFabricante = $this->createForm(new Form\PaisesType(array('isFabricante' => true)), $entityPais);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27713537

复制
相关文章
为什么ConcurrentHashMap不允许插入null值?
在 Java 语言中,ConcurrentHashMap 和 Hashtable 这些线程安全的集合是不允许 key 或 value 插入 null 值的,而 HashMap 又允许 key 或 value 插入 null 值,这到底是为什么呢?
磊哥
2022/05/09
1.9K0
为什么ConcurrentHashMap不允许插入null值?
为什么ConcurrentHashMap不允许插入null值?
在Java语言中,给ConcurrentHashMap和Hashtable这些线程安全的集合中的Key或者Value插入 null(空) 值的会报空指针异常,但是单线程操作的HashMap又允许 Key 或者 Value 插入 null(空) 值。这到底是为什么呢?
Tom弹架构
2022/08/22
2K0
为什么ConcurrentHashMap不允许插入null值?
iOS最新漏洞可实现“以假乱真”的iCloud密码钓鱼
近日安全研究人员发布了一份漏洞利用代码。这份代码表明,攻击者可以通过足以以假乱真的钓鱼,轻易窃取使用最新iOS版本的iCloud密码。 漏洞原理 这个概念验证性攻击利用了iOS系统中默认的电子邮件程序Mail.app的一个漏洞。自从4月初iOS8.3版本发布以来,该应用就未能从接收邮件消息中适当剔除含有潜在危险的HTML代码。 这个POC正是利用了这一漏洞,它从远程服务器下载一个表单,该表单看起来与合法的iCloud登录提示窗口完全相同。每当用户查看包含“陷阱”的消息时,这个伪造的登录提示窗都可以自动显
FB客服
2018/02/06
1.2K0
iOS最新漏洞可实现“以假乱真”的iCloud密码钓鱼
实战 HomeAssistant 基于 iCloud3 v3 跟踪 iOS 设备
HA 自带 iCloud 的集成,但如果开启了二次验证经常需要输入验证码。这里介绍一个第三方项目 iCloud3 v3 Device Tracker Custom Component,可以用来跟踪 iOS 设备
远哥制造
2023/09/24
1.7K0
实战 HomeAssistant 基于 iCloud3 v3 跟踪 iOS 设备
【iOS 开发】Controller 之间使用代理传值
控制器之间经常需要互相传递值,第一个控制器(简称 MasterVC)在通过 NavigationController Push 第二个控制器(简称 DetailVC)的时候,可以捕获到 DetailVC,所以可以设定后者的变量。而 DetailVC 在给 MasterVC 传递值的时候,比如设定 MasterVC 的 Title,却不能用同样的方式传值(试一下就知道了),而且因为我们要通过 NavigationController 返回原来的界面而不是 push 一个新的界面,所以也不能通过 segue 传值,解决方法我尝试了两种:
KyXu
2019/04/11
1.1K0
【iOS 开发】Controller 之间使用代理传值
iOS 页面传值
新的方式,在storybord的A和B两个ViewController拖出一条segue,假如从A跳到B
码客说
2019/10/22
1.4K0
如何使用下载安装App Uploader和iCloud
步骤6:如果没有APP账号的话,在apple官网,然后点击“创建您的APP ID” 。
iOS程序应用
2023/04/17
5870
如何使用下载安装App Uploader和iCloud
客户端检查篇
作者:互娱iOS预审团队,隶属于互娱研发部品质管理中心,致力于互娱产品的iOS审核前的验收工作。 通过细分将iOS预审工作划为3大块:客户端资源检查、应用内容检查和提审资源检查,接下来我们先从客户端检查开始介绍。 客户端检查的主要目的是通过客户端配置检查来保证客户端符合苹果的开发者规范以及其他更新的要求,包括存储系统、配置文件、网络连接(VPN)、icon检查、私有API检查,提审前的审核会覆盖这几个部分的各个测试点。 1存储系统检查 苹果官方对用户数据存储有严格的规范,以往有很多被拒案例都是关于存储的。因
腾讯大讲堂
2018/02/12
2.1K0
客户端检查篇
【客户端检查篇】告别被拒,提升iOS审核通过率(二)
作者:互娱iOS预审团队,隶属于互娱研发部品质管理中心,致力于互娱产品的iOS审核前的验收工作。 通过细分将iOS预审工作划为3大块:客户端资源检查、应用内容检查和提审资源检查,接下来我们先从客户端检查开始介绍。 客户端检查的主要目的是通过客户端配置检查来保证客户端符合苹果的开发者规范以及其他更新的要求,包括存储系统、配置文件、网络连接(VPN)、icon检查、私有API检查,提审前的审核会覆盖这几个部分的各个测试点。 1存储系统检查 苹果官方对用户数据存储有严格的规范,以往有很多被拒案例都是关于存储的。因
腾讯大讲堂
2018/02/12
2.7K0
【客户端检查篇】告别被拒,提升iOS审核通过率(二)
【客户端检查篇】告别被拒,提升iOS审核通过率(二)
作者:互娱iOS预审团队,隶属于互娱研发部品质管理中心,致力于互娱产品的iOS审核前的验收工作。 通过细分将iOS预审工作划为3大块:客户端资源检查、应用内容检查和提审资源检查,接下来我们先从客户端检查开始介绍。 客户端检查的主要目的是通过客户端配置检查来保证客户端符合苹果的开发者规范以及其他更新的要求,包括存储系统、配置文件、网络连接(VPN)、icon检查、私有API检查,提审前的审核会覆盖这几个部分的各个测试点。 1 存储系统检查 苹果官方对用户数据存储有严格的规范,以往有很多被拒案例都是关于存储的。
WeTest质量开放平台团队
2023/05/04
1.4K0
【客户端检查篇】告别被拒,提升iOS审核通过率(二)
iCloud 自定电子邮件域名使用指南
自定电子邮件域名是 iCloud+ 所附带的一项免费服务,在订阅任意级别的 iCloud 套餐计划后即可使用。这项服务允许用户绑定最多五个域名,每个域名最多三个邮箱地址。对于个人来说,如果你已经在订阅 iCloud 服务又正好有域名邮箱的需求,那么不妨一试。
reizhi
2022/09/26
4K0
iCloud 自定电子邮件域名使用指南
iOS中storyboard故事板使用Segue跳转界面、传值
在iOS的开发过程中,不可避免的要设计界面,在android中有xml设置界面和直接使用java代码设置界面控件两种方式,在之前的ios开发中也是类似的有xib文件设置界面及用代码直接设置控件两种方法,但后来又出了一种方式,就是storyboard故事板子,其实storyboard和xib文件很像,最大的不同之处在于一个xib文件对应一个ViewController视图控制器,而storyboard对应多个,基本一个应用只需要一个storyboard就可以了,不再需要为每个控制器创建一个xib文件,从这点上来说,还是很方便的,在storyboard中查看各个界面的跳转也很方便,但之前一直使用xib进行开发,对storyboard的使用不太熟悉,今天好好学习了一下其中的界面跳转和传值,用到了Segue这个东西,这里借着例子说明一下。
Cloudox
2021/11/23
1.6K0
iOS中storyboard故事板使用Segue跳转界面、传值
从大厂不允许使用 SELECT * 说开去
作为开发人员数据库查询语句我们经常用到,但是你是否想过为什么大厂都会强制开发人员禁止使用 SELECT * 语句?你一定会说因为效率低啊,多差除了一些无用的数据。如果是这么想的,那就继续听我来说。
喵叔
2020/10/29
1.1K0
苹果iCloud大面积瘫痪,大量官方服务无法使用
10月24日消息,据9to5mac等多家美国科技媒体报道,iCloud故障发生的时间是美国当地时间周二(延续到北京时间周三)。许多苹果用户在网络上反映无法使用诸多依赖iCloud的服务,比如Notes、“找到我的iPhone”等。
Lcry
2022/11/29
7550
为什么不允许使用 Java 静态构造函数?
不允许使用 Java 静态构造函数,但是为什么呢?在深入探讨不允许使用静态构造函数的原因之前,让我们看看如果要使 构造函数静态化 会发生什么。
淡定的蜗牛
2019/10/28
3.1K0
为什么HashMap的key允许空值,而HashTable却不允许
HashMap在put的时候会调用hash()方法来计算key的hashcode值,可以从hash算法中看出当key==null时返回的值为0。因此key为null时,hash算法返回值为0,不会调用key的hashcode方法。
凌云Cloud
2020/10/30
1.7K0
为什么HashMap的key允许空值,而HashTable却不允许
CloudKit实践
最近个人开发了一个保存密码的简单APP,有一个网络备份功能,鉴于功能比较轻便和安全私密性的考虑,采用了CloudKit作为备份服务器的方式进行备份资源。写个博客记录一下应用过程。
Helloted
2022/06/07
1.8K0
CloudKit实践
RPC接口不允许使用枚举类型。为什么?
RPC是Remote Procedure Call的缩写。中文名是:远程服务调用。简单来说就是一个节点提供服务(称为服务端),一个节点消费服务(客户端)。
玖柒的小窝
2021/12/11
1.1K0
RPC接口不允许使用枚举类型。为什么?
Windows Chrome/Edge同步iCloud密码
众所周知,跨平台数据同步是一个非常重要的功能,尤其对于那些设备不同的工作者有着巨大的左右,比如手持iPhone/iPad,但是电脑是Windows系统的情况下,本篇教程就能给你带来一些帮助
KINDYEAR
2022/10/05
2.7K0
Windows Chrome/Edge同步iCloud密码
java线程池,阿里为什么不允许使用Executors?
线程池可以通过池看出来是一个资源集,任何池的作用都大同小异,主要是用来减少资源创建、初始化的系统开销。
落跑架构师M
2019/12/30
1.1K0
java线程池,阿里为什么不允许使用Executors?

相似问题

Xamarin.iOS iCloud访问iCloud密钥-值存储

15

iCloud存储中的iOS校验空值

10

com.apple.developer.icloud-container-identifiers与com.apple.developer.ubiquity-container-identifiers的区别

145

使用iOS数据的iCloud 8扩展

11

iOS iCloud文档更改通知

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文