我写了一个动态创建block的模块。在每个块我有一个形式。我的问题是,我想要一个动态的形式id为每个形式,但在我的ModuleBlockForm.php我只能定义一个静态的
public function getFormId() {
return 'mymodule_block_form';
}
但是我想要这样的:
public function getFormId() {
return 'mymodule_block_form_' . $foo;
}
可能吗?
thanks for help
抱歉:由于我还不能评论,我将把我的评论作为答案写下来
我在Julie Pelletier的回答中看到的问题是,rand不会生成唯一的数字,所以我建议定义一个私有的静态整数slug,你附加到每个formId并增加它。
的例子:
private static $slug = 0;
和__construct()
self::$slug = 0;
和getFormId()
self::$slug += 1;
return 'mymodule_block_form_' . self::$slug;
你可以把最后两行合二为一,我这样写是为了便于阅读。
希望对你有帮助。
您应该在构造函数中将其设置为类属性。它既可以传递给对象的构造函数,也可以随机传递,例如:
this->formId = rand(11111, 99999);
…并将其用作:
public function getFormId() {
return 'mymodule_block_form_' . this->formId;
}
由于我的表单正在动态构建(基于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);
ashraf aaref建议的方法对我不起作用,但下面的方法可以。
public function getFormId() {
static $num = 0;
$num++;
return 'mymodule_form_' . $num;
}