Forms 表单验证-只需填写一个字段

Forms 表单验证-只需填写一个字段,forms,validation,symfony,Forms,Validation,Symfony,我有以下表格: public function buildForm(formbuilder接口$builder,数组$options) { $builder ->添加('existingfolder','entity',数组( 'class'=>'ImageBundle:文件夹', “必需”=>false, )) ->添加('folder','text',array('required'=>false)) ->添加(“文件”、“文件”); } 如何设置验证,以便必须填写现有文件夹或文件夹字段(

我有以下表格:

public function buildForm(formbuilder接口$builder,数组$options)
{
$builder
->添加('existingfolder','entity',数组(
'class'=>'ImageBundle:文件夹',
“必需”=>false,
))
->添加('folder','text',array('required'=>false))
->添加(“文件”、“文件”);
}
如何设置验证,以便必须填写
现有文件夹
文件夹
字段(但不能同时填写这两个字段)

谢谢你的建议

谢谢。

使用或验证断言,这里有一个示例来检查用户是否必须提供至少一个文件夹:

<?php
namespace Acme\BlogBundle\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Image
{
    // ...properties, functions, etc...

    /**
     * @Assert\True(message = "You must give at least an existing folder or a new folder")
     */
    public function isThereOneFieldFilled()
    {
        return ($this->existingfolder || $this->folder); // If false, display an error !
    }
}
编辑:

表单中的回调验证(我找到了一个示例):


谢谢我怎么能在一个不基于模型的表单中使用它呢?我不知道这是否改变了,但是注释是
isTrue(
),而不仅仅是
True(
)。
    /**
     * @Assert\True(message = "You must give an existing folder or a new folder, not both")
     */
    public function isThereOnlyOneFieldFilled()
    {
        return (!$this->existingfolder && $this->folder || $this->existingfolder && !$this->folder);
    }
// use ...
use Symfony\Component\Form\CallbackValidator;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormInterface;

// Inside the form:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('existingfolder', 'entity', array(
            'class'     => 'ImageBundle:Folder',
            'required'  => false,
        ))
        ->add('folder', 'text', array('required' => false))
        ->add('file', 'file');

    // Use the CallbackValidator like a TrueValidator behavior
    $builder->addValidator(new CallbackValidator(function(FormInterface $form) {
        if (!$form["existingfolder"]->getData() && !$form["folder"]->getData()) {
            $form->addError(new FormError('You must give at least an existing folder or a new folder'));
        }
    }));
}