Php Drupal8动态表单ID

Php Drupal8动态表单ID,php,Php,我编写了一个动态创建块的模块。每个街区我都有一张表格。我的问题是,我希望每个表单都有一个动态表单id,但在ModuleBlockForm.php中,我只能用 public function getFormId() { return 'mymodule_block_form'; } 但我想要这样的东西: public function getFormId() { return 'mymodule_block_form_' . $foo; } 可能吗 感谢您的帮助

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

  public function getFormId() {
    return 'mymodule_block_form';
  }
但我想要这样的东西:

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


感谢您的帮助

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

this->formId = rand(11111, 99999);
…并将其用作:

public function getFormId() {
    return 'mymodule_block_form_' . this->formId;
}
抱歉:因为我还不能发表评论,我会写我的评论作为回答

我在Julie Pelletier的回答中看到的问题是,rand不会生成唯一的数字,因此我建议定义一个私有的静态整数slug,将它附加到每个formId并递增

例如:

private static $slug = 0;
在_u构造()中

在getFormId()中

你们可以把最后两行合并成一行,我只是为了可读性写的


希望能有所帮助。

因为我的表单是动态生成的(基于作为参数进入表单生成器的插件id),所以我可以通过定义
受保护的静态$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);

ashraf aaref建议的方法对我不起作用,但下面的方法确实起作用

public function getFormId() {
    static $num = 0;
    $num++;
    return 'mymodule_form_' . $num;
}
$blockId = $buildInfo['args'][0] ?? NULL;    
self::$formId = Html::cleanCssIdentifier($blockId);
public function getFormId() {
    static $num = 0;
    $num++;
    return 'mymodule_form_' . $num;
}