Drupal 8动态表单ID

时间:2016-07-04 14:55:15

标签: php

我写了一个动态创建块的模块。在每个区块我都有一个表格。我的问题是我想为每个表单创建一个动态表单id,但是在我的ModuleBlockForm.php中,我只能用

定义一个静态表单id。
  public function getFormId() {
    return 'mymodule_block_form';
  }

但我想要这样的事情:

  public function getFormId() {
    return 'mymodule_block_form_' . $foo;
  }

这可能吗?

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

抱歉:由于我还没有发表评论,我会将我的评论作为答案写下来

我在 Julie Pelletier 的回答中看到的问题,rand不会生成唯一的数字,所以我建议定义一个私有静态整数slug,你追加到每个formId并增加它

示例:

private static $slug = 0;

和__construct()

self::$slug = 0;

和getFormId()

self::$slug += 1;
return 'mymodule_block_form_' . self::$slug;

你可以将最后两行合二为一,我只是为了便于阅读而写了它。

希望有所帮助。

答案 1 :(得分:0)

您应该在构造函数中将其设置为类属性。它可以传递给对象的构造函数,也可以随机传递给:

this->formId = rand(11111, 99999);

...并将其用作:

public function getFormId() {
    return 'mymodule_block_form_' . this->formId;
}

答案 2 :(得分:0)

由于我的表单是动态构建的(基于表单构建器中的plugin_id作为参数),因此我可以通过定义protected static $formId属性来实现此目的。

比这样创建方法getFormId

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    $formId = 'settings_form';
    if (self::$formId) {
      $formId .= '_' . self::$formId;
    }
    return $formId;
  }

比起我只用buildForm方法来调用

$blockId = $buildInfo['args'][0] ?? NULL;    
self::$formId = Html::cleanCssIdentifier($blockId);

答案 3 :(得分:0)

ashraf aaref 建议的方法对我不起作用,但以下方法可行。

public function getFormId() {
    static $num = 0;
    $num++;
    return 'mymodule_form_' . $num;
}