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