PHP Symfony:如何在表单模板中访问getter-Constraint?

Mannimalte

我创建了一个简单的实体类,其中包含一些属性,并创建了一个公共的getter-Method,该方法执行一些操作并返回true或false。

class Item {
    public prop1;
    public prop2;

    public function isGetterConstraint() {
        return true // or false based on some calculations
    }
}

然后,我在validation.yml中为该类定义了约束:

Foo\MyBundle\Entity\Item:
    properties:
        prop1:
            - NotBlank: ~
        prop2:
            - NotBlank: ~
    getters:
        getterConstraint:
            - "True": { message: "zu" }

这是在许多示例中看​​到的,但是我还没有找到如何在控制器或树枝模板中以某种形式访问此getter约束的方法。就我而言,我确实在模板中需要它。

如果我这样定义我的FormType

class ClientType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('prop1', 'text')
            ->add('prop2', 'text');
    }

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

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Foo\MyBundle\Entity\Item',
        ));
    }
}

和我的控制器一样

class ItemController extends Controller {
    public function createAction(Request $request) {
        $item = new Item();

        $form = $this->buildForm($item);
        $form->handleRequest($request);

        if ($form->isValid()) {
            // do some nice things like saving the data
        }
        return $this->render('FooMyBundle:Item:form.html.twig', array('form' => $form->createView());
    }
}

表单不了解getter约束,因此无法访问它,就像我习惯使用属性约束一样:

// form.html.thwig

{% if form.prop1.vars.errors %}{% endif %} // works

{% if form.getterConstraint.vars.errors %}{% endif %} // doesnot work

有没有一种方法可以将getter约束添加到FormType上,或者在验证数据并将结果公开给控制器或模板时,我必须做些什么才能使窗体考虑此约束?

哈里德·朱奈德(M Khalid Junaid)

您实际上可以直接在实体中使用getter约束

// src/Acme/BlogBundle/Entity/Author.php

// ...
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\True;

class Author
{
    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addGetterConstraint('passwordLegal', new True(array(
            'message' => 'The password cannot match your first name',
        )));
    }
public function isPasswordLegal()
{
    return $this->firstName != $this->password;
}
}

演示代码取自Symfony验证

或者,您可以在实体中使用注释定义回调

// src/Acme/BlogBundle/Entity/Author.php

// ...

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContextInterface;

/**
 * @Assert\Callback(methods={"isPasswordLegal"})
 */
class Author
{
public function isPasswordLegal(ExecutionContextInterface $context)
{
    $context->addViolationAt('password', 'wrong password');
}  
}

在控制器中,您可以这样做

// src/KnpU/QADayBundle/Controller/EventController.php

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContextInterface;
use KnpU\QADayBundle\Entity\Event;
// ...
public function newAction(Request $request)
{
    $form = $this->createFormBuilder(null, array(
        'data_class' => 'KnpU\QADayBundle\Entity\Event',
        'constraints' => array(
            new Assert\Callback(array(array($this, 'validateEventDates')))
        )
    ))
        ->add('name', 'text')
        ->add('startDate', 'datetime')
        ->add('endDate', 'datetime')
        ->getForm()
    ;

    // ...
}

public function validateEventDates(Event $event, ExecutionContextInterface $context)
{
    $context->addViolationAt('startDate', 'There is already an event during this time!');
}

自定义验证,回调和约束

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP Symfony:如何在表单模板中访问getter-Constraint?

来自分类Dev

SYMFONY自定义CONSTRAINT->将变量传递给自定义CONSTRAINT /绑定到表单字段的CONSTRAINT如何在注释中覆盖CONSTRAINT

来自分类Dev

如何在fuelphp中管理多个表单模板

来自分类Dev

在Hibernate教程中添加CONSTRAINT

来自分类Dev

如何在symfony 2 php中的注释中访问类变量和常量

来自分类Dev

无法在MySQL中创建FOREIGN KEY CONSTRAINT

来自分类Dev

在SQL中删除CONSTRAINT花费的时间太长

来自分类Dev

如何在PHP中访问会话变量?

来自分类Dev

如何在PHP对象中访问信息

来自分类Dev

如何在php中访问stdclass的值

来自分类Dev

如何在PHP中访问stdclass对象

来自分类Dev

如何在php对象中访问数据

来自分类Dev

如何在PHP中访问.json数据?

来自分类Dev

如何在PHP对象中访问数组

来自分类Dev

如何在WordPress php模板中包含PHP文件?

来自分类Dev

Django-如何在HTML中覆盖表单模板标签

来自分类Dev

在Alter表中是否需要使用“ Constraint”关键字来添加[Constraint]语法?

来自分类Dev

如何在Symfony中使表单模块化?

来自分类Dev

Twig / Symfony表单模板语法

来自分类Dev

在laravel / doctrine中断言实现symfony / constraint / validation

来自分类Dev

Symfony2 - choice constraint using Doctrine repository

来自分类Dev

在laravel / doctrine中断言实现symfony / constraint / validation

来自分类Dev

如何在 PHP 中使用 getter?

来自分类Dev

在表单模型绑定表单中,如何在不使用帮助程序的情况下访问变量?

来自分类Dev

如何在php中设计用户输入表单

来自分类Dev

了解如何在PHP中处理POST表单

来自分类Dev

如何在我的php邮件表单中添加图片标题?

来自分类Dev

如何在PHP中的按钮提交上保存表单

来自分类Dev

如何在PHP中创建可编辑的Pdf表单

Related 相关文章

  1. 1

    PHP Symfony:如何在表单模板中访问getter-Constraint?

  2. 2

    SYMFONY自定义CONSTRAINT->将变量传递给自定义CONSTRAINT /绑定到表单字段的CONSTRAINT如何在注释中覆盖CONSTRAINT

  3. 3

    如何在fuelphp中管理多个表单模板

  4. 4

    在Hibernate教程中添加CONSTRAINT

  5. 5

    如何在symfony 2 php中的注释中访问类变量和常量

  6. 6

    无法在MySQL中创建FOREIGN KEY CONSTRAINT

  7. 7

    在SQL中删除CONSTRAINT花费的时间太长

  8. 8

    如何在PHP中访问会话变量?

  9. 9

    如何在PHP对象中访问信息

  10. 10

    如何在php中访问stdclass的值

  11. 11

    如何在PHP中访问stdclass对象

  12. 12

    如何在php对象中访问数据

  13. 13

    如何在PHP中访问.json数据?

  14. 14

    如何在PHP对象中访问数组

  15. 15

    如何在WordPress php模板中包含PHP文件?

  16. 16

    Django-如何在HTML中覆盖表单模板标签

  17. 17

    在Alter表中是否需要使用“ Constraint”关键字来添加[Constraint]语法?

  18. 18

    如何在Symfony中使表单模块化?

  19. 19

    Twig / Symfony表单模板语法

  20. 20

    在laravel / doctrine中断言实现symfony / constraint / validation

  21. 21

    Symfony2 - choice constraint using Doctrine repository

  22. 22

    在laravel / doctrine中断言实现symfony / constraint / validation

  23. 23

    如何在 PHP 中使用 getter?

  24. 24

    在表单模型绑定表单中,如何在不使用帮助程序的情况下访问变量?

  25. 25

    如何在php中设计用户输入表单

  26. 26

    了解如何在PHP中处理POST表单

  27. 27

    如何在我的php邮件表单中添加图片标题?

  28. 28

    如何在PHP中的按钮提交上保存表单

  29. 29

    如何在PHP中创建可编辑的Pdf表单

热门标签

归档