我写了一个动态创建块的模块。在每个区块我都有一个表格。我的问题是我想为每个表单创建一个动态表单id,但是在我的ModuleBlockForm.php中,我只能用
定义一个静态表单id。 public function getFormId() {
return 'mymodule_block_form';
}
但我想要这样的事情:
public function getFormId() {
return 'mymodule_block_form_' . $foo;
}
这可能吗?
感谢您的帮助
答案 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;
}