【问题标题】:bind error to embedded form field in symfony2's controller将错误绑定到 symfony2 控制器中的嵌入式表单字段
【发布时间】:2014-06-20 08:14:14
【问题描述】:

使用 Symfony2.3.​​4

正如标题所解释的那样,我需要将错误消息绑定到嵌入式表单字段,最好是在控制器中。我在想可能类似于我使用单一表单的方式:

use Symfony\Component\Form\FormError;
//....
public function createAction(){
//.....
$postData = current($request->request->all());

if ($postData['field_name'] == '') {
            $error = new FormError("Write some stuff in here");
            $form->get('field_name')->addError($error);
        }
//.....
}

或者也许它必须以不同的方式完成,无论哪种方式我都需要帮助,

谢谢$

【问题讨论】:

    标签: forms symfony error-handling


    【解决方案1】:

    我明白了,当表单字段不包含任何值时,您正试图显示一条消息。您可以在表单类中轻松完成此操作,如下所示:

    buildForm(FormBuilderInterface $builder, array $options) {
        $builder->add('field_name', 'text', array(
            'label' => 'Field label',
            'required' => true,
            'constraints' => array(
                new NotBlank(array('message' => 'Write some stuff in here.'))
             ),
        ));
    }
    

    如果您需要在表单中注入不属于 Symfony2 框架的其他类型的约束,您可以create your own validation constraint

    如果您想在控制器中为表单添加一些选项,可以通过设置自己的选项在创建表单的方法中完成:

    class YourController {
        public function createForm(YourEntity $yourEntity){
            $form = $this->createForm(new YourFormType(), $yourFormType, array(
                'action' => $this->generateUrl('your_action_name', 
                array('your_custom_option_key' => 'Your custom option value')),
                'method' => 'POST',
            ));
    
            return $form;
        }
    
        // Rest of code omitted.
    }
    

    之后,您需要在表单类中的setDefaultOptions(OptionsResolverInterface $resolver) 方法中添加一个选项,如下所示:

    public function setDefaultOptions(OptionsResolverInterface $resolver){
        $resolver->setDefaults(array(
            'your_custom_option_key' => '',
        ));
    }
    

    然后在buildForm(FormBuilderInterface $builder, array $options)方法中访问它,像这样:

    buildForm(FormBuilderInterface $builder, array $options) {
        $options['your_custom_option_key']; // Access content of your option
    
        // The rest of code omitted.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      相关资源
      最近更新 更多