当前位置: 首页 > 知识库问答 >
问题:

“约束”选项不存在

申宜
2023-03-14

我正在使用Symfony 2.6。我试图创建一个没有实体的表单,但得到以下错误:

“约束”选项不存在。已知选项有:“操作”、“属性”、“自动初始化”、“块名称”、“按引用”、“复合”、“csrf\u字段名称”、“csrf\u消息”、“csrf\u保护”、“csrf\u提供程序”、“csrf\u令牌id”、“csrf\u令牌管理器”、“数据”、“数据类”、“禁用”、“空数据”、“错误冒泡”、“继承\u数据”、“意图”、“标签”、“标签属性”、“标签格式”,“映射”、“最大长度”、“方法”、“模式”、“发布最大大小消息”、“属性路径”、“只读”、“必需”、“翻译域”、“修剪”、“虚拟”。

    class MessageType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('sender', 'text', [
                'constraints' => [
                    new Constraints\NotBlank(),
                ],
            ])
            ->add('recipient', 'email')
            ->add('message', 'textarea');
    }

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

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $collectionConstraint = new Constraints\Collection(array(
            'fields' => [
                'sender' => [
                    new Constraints\NotBlank(),
                    new Constraints\Email(),
                ],
                'recipient' => [
                    new Constraints\NotBlank(),
                    new Constraints\Email(),
                ],
                'message' => [
                    new Constraints\NotBlank(),
                ],
            ],

        ));

        $resolver->setDefaults([
            'validation_constraints' => $collectionConstraint,
        ]);
    }
}

仅使用setDefaultOptions不会显示错误,但它不起作用,不会验证字段。

可以看出,无论如何都试过了。我还尝试了使用组件表单发件箱的留档,但得到相同的错误。

http://symfony.com/doc/current/components/form/introduction.html#form-验证

编辑

我也尝试过这种方法,但得到了相同的错误。

    $form = $formFactory->createBuilder()
    ->add('task', 'text', array(
        'constraints' => new NotBlank(),
    ))
    ->add('dueDate', 'date', array(
        'constraints' => array(
            new NotBlank(),
            new Type('\DateTime'),
        )
    ))
    ->getForm();

共有3个答案

柳羽
2023-03-14

这是一个相当古老的问题,我刚刚发现它,所以这个问题仍然不时出现。

我确实喜欢在文档中:https://symfony.com/doc/current/components/form.html

$validator = Validation::createValidator();

    $formFactory = Forms::createFormFactoryBuilder()
        ...
        ->addExtension(new ValidatorExtension($validator))
        ...
        ->getFormFactory();

当然,不要忘记使用:

use Symfony\Component\Form\Extension\Validator\ValidatorExtension;
端木兴国
2023-03-14

约束选项是不是核心表单扩展的一部分。它只加载核心表单扩展。添加以下代码可修复此问题。

protected function getExtensions()
{
    return [new ValidatorExtension(Validation::createValidator())];
}

更多信息https://symfony.com/doc/current/form/unit_testing.html#adding-自定义扩展

栾耀
2023-03-14

“约束”选项是验证程序扩展表单的一部分。我是如何解决问题的:

$ValidatorExtension = new ValidatorExtension($validatorBuilder->getValidator());

$formRegistry = new FormRegistry([$csrfProvider, new CoreExtension(), $ValidatorExtension], Yii::$symfony->container->get('form.resolved_type_factory'));
 类似资料:
  • 来自constraints模块的函数在优化过程中为网络的参数施加约束 惩罚项基于层进行惩罚,目前惩罚项的接口与层有关,但Dense, Conv1D, Conv2D, Conv3D具有共同的接口。 这些层通过一下关键字施加约束项 kernel_constraint:对主权重矩阵进行约束 bias_constraint:对偏置向量进行约束 from keras.constraints import m

  • 来自constraints模块的函数在优化过程中为网络的参数施加约束 惩罚项基于层进行惩罚,目前惩罚项的接口与层有关,但Dense, TimeDistributedDense, MaxoutDense, Covolution1D, Covolution2D, Convolution3D具有共同的接口。 这些层通过一下关键字施加约束项 W_constraint:对主权重矩阵进行约束 b_constr

  • 约束项的使用 constraints 模块的函数允许在优化期间对网络参数设置约束(例如非负性)。 约束是以层为对象进行的。具体的 API 因层而异,但 Dense,Conv1D,Conv2D 和 Conv3D 这些层具有统一的 API。 约束层开放 2 个关键字参数: kernel_constraint 用于主权重矩阵。 bias_constraint 用于偏置。 from keras.const

  • 问题内容: 在我的数据库创建脚本中,创建脚本如下所示: 第一次运行良好,但是如果我再次运行,它将在最后一行失败,并带有“写入或更新时复制密钥”。 有什么办法可以做类似的事情吗?就像我可以使用查询吗? 问题答案: 有趣的问题。您可能需要在调用语句之前禁用外键,然后再启用它们。这将允许您直接在DDL中定义外键: 例: 测试用例:

  • 尝试在 Postgres 9.5 中更改表以创建外键约束时:从 到 返回错误 我很困惑为什么帖子试图找到,当密钥是从到 有什么想法吗?

  • 问题内容: Postgres是否有任何办法说如果约束已经存在,它将忽略该命令,从而不会引发错误? 问题答案: 这可能有所帮助,尽管可能有点脏: 然后致电: 更新: 根据Webmut的以下建议: 在您的开发数据库中,或者在您知道可以关闭依赖该数据库的应用程序作为维护时段的情况下,这可能很好。 但是,如果这是一个至关重要的24x7全天候生产环境,那么您真的不想像这样随意地放弃约束。即使是几毫秒,也有一

  • 我有两个组件和。每个组件都是由<code>ConstraintLayout</code>创建的。现在,我从上面的组件创建<code>WelcomeScreen</code>。 用例1:使用静态< code>ConstraintLayout(在< code>ConstraintLayout内的< code>ConstraintLayout) 结果:布局预览不显示任何内容 用例2:<代码>Welcom

  • 问题内容: 我收到以下错误: 违反主键约束’PK_ss_student_grade’。无法在对象“ dbo.ss_student_grade”中插入重复的密钥。重复密钥值为(301、1011、24801、33)。 如果我在插入之前检查表,则没有记录具有这样的主键。 插入是通过C#代码完成的,并且我确保该代码仅运行一次。即使在错误之后,如果我检查表,我仍然无法获得具有这样的主键的记录。 注意:触发器