【发布时间】:2019-11-08 21:56:48
【问题描述】:
在使用 Joomla 10 年后,我对这个美妙的 10 月很陌生,并希望继续努力。 我正在使用出色的 Builder 插件,并希望在后端使用“创建”或“更新”表单进行“复杂”验证。
在网上浏览了很多次后,我不知道如何以及在哪里放置代码以添加业务验证规则?
我使用 yaml 选项来获得动态字段和简单的验证。 现在我想要复杂的规则,例如:如果类别是 X,类型是 Y,则(文本)名称字段设置为 'ZZZ' 有人可以让我在 PHP 中添加这样的代码吗?
我能够读取字段值,但无法以编程方式更改输入。 经过多次尝试,我被困在这个问题上。 任何帮助将不胜感激。谢谢。
[编辑] 在 Raja 的帮助下,我修改了我的代码,如下所示: PHP模型
class Event extends Model {
use \October\Rain\Database\Traits\Validation;
use \October\Rain\Database\Traits\SoftDelete;
public $rules = [];
// in models/your_object_model
public function filterFields($fields, $context = null) {
echo "\r\n".'filterFields() : '.$this->nom."\r\n";
// var_dump($fields->nom);
if ( $this->nom == 'toto' ) {
echo $this->nom.' is french'."\r\n";
$fields->pays->value = 'FR';
$fields->pays->hidden = true;
$fields->ville->value = 'Paris';
}
}
}
YAML:
fields:
nom:
label: Nom
span: full
type: text
description:
label: Description
size: ''
span: full
type: richeditor
pays:
label: Pays
span: auto
default: US
type: text
dependsOn: nom
ville:
label: Ville
span: auto
default: NY
dependsOn: nom
type: text
我的理解是 filterFields() 是基于 YAML dependsOn: nom 触发的。
当我填写“Nom”并点击描述时,结果现在是:
1) 当我进入函数时,我仍然无法更改表单中的值,因为我显示字符串“toto is french”
2)在我尝试修改的文本字段上,我得到了无尽的微调器,现在无法用鼠标输入字段,只能用键盘输入
3) 如何删除绿色字符串 X_OCTOBER_ASSETS ?
【问题讨论】:
-
你试过
filterfields方法了吗?您可以操纵后端字段值。见这里:octobercms.com/docs/backend/forms#filter-form-fields -
谢谢,我尝试了这个功能,但是:1)我无法将文本字段与值进行比较,即:if ($this->nom == "toto") {} 2)我不知道如何修改表单字段值,具体取决于我的验证逻辑?
-
我在下面添加了一个小例子。
标签: octobercms octobercms-backend