【问题标题】:Syntax for filed validation in Drupal 8 FormDrupal 8 表单中字段验证的语法
【发布时间】:2017-10-24 13:55:40
【问题描述】:

您好,我正在尝试在 Drupal 8 中编写一个自定义模块,该模块的要求是有一个包含一些字段的表单。

我已经编写了包含一些字段的表单,并对输入数据执行了验证。

表单字段代码如下所示

    public function buildForm(array $form, FormStateInterface $form_state) {
    $form['name'] = array(
      '#type' => 'textfield',
      '#size' => 15,
      '#title' => t('Name'),
      '#default_value' => 'user',
      '#maxlength' => 15,
      '#required' => TRUE, 
      '#weight' => 1,
    );
   }

表单验证代码如下所示

   public function validateForm(array &$form, FormStateInterface $form_state) {

   $name = $form_state->getValue('name');
   if (!preg_match("/^[a-zA-Z ]*$/",$name))
   {
          $form_state->setErrorByName('name', $this->t('Enter a valid name'));
   }
   }

根据某些页面中的 Drupal 文档,它被记录为

 $form_state->setErrorByName('name', $this->t('Enter a valid name'));

在某些页面中它被称为

$form_state->setErrorByName('$name', $this->t('Enter a valid name'));

我怀疑验证的正确语法是什么?

观察 setErrorByName('$name') 和 setErrorByName('name') 的区别

【问题讨论】:

    标签: php drupal drupal-8


    【解决方案1】:
    $form_state->setErrorByName('name', $this->t('Enter a valid name'));
    

    这是正确的。

          $name = $form_state->getValue('name');
          if(preg_match("/^[a-zA-Z ]*$/", $name)) {
             $form_state->setErrorByName('name', $this->t('Enter a valid name'));
          }
    

    【讨论】:

    • 感谢您的回答,但 setErrorByName('name') 中的“名称”实际上是什么意思是字段名称或变量名称还是一些虚拟名称?因为即使我写 setErrorByName('blabla' ) 或 setErrorByName('$name') 验证成功。
    • 名称来自 $form['name']
    • 知道为什么我写 setErrorByName('blabla') 时验证有效吗?
    猜你喜欢
    • 2020-06-21
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多