Validation Octobercms验证关系用户
我与用户模型有以下关系Validation Octobercms验证关系用户,validation,relation,octobercms,Validation,Relation,Octobercms,我与用户模型有以下关系 public $belongsTo = [ 'user' => [ 'Rainlab\User\Models\User', 'key' => 'user_id', 'order' => 'name asc' ] ]; config_relation.yaml user: label: Usuários view: form: $/rainlab/user/models/us
public $belongsTo = [
'user' => [
'Rainlab\User\Models\User',
'key' => 'user_id',
'order' => 'name asc'
]
];
config_relation.yaml
user:
label: Usuários
view:
form: $/rainlab/user/models/user/fields.yaml
toolbarButtons: create|link
manage:
showSearch: true
showCheckBoxes: true
recordsPerPage: 10
list: $/rainlab/user/models/user/columns.yaml
form: $/rainlab/user/models/user/fields.yaml
我正在对用户
字段进行验证,但它不起作用,即使我已经选择了用户,它仍会继续通知我需要选择该用户
/**
* @var array Validation rules
*/
public $rules = [
'user' => 'required'
];
是的,
我能理解你的问题
。只有当您要添加新记录时,才会发生这种情况
它将非常适用于现有记录
。至于现有记录
数据是持久化在数据库中的
,因此我们可以表示一个工作记录,然后我们可以对其进行关系验证
但对于新记录
而言,没有ID意味着记录本身未保存在数据库中,因此与该关系字段没有关系,因此我们永远不知道该字段是否附加了某些值,验证将一直失败
因此,无论您添加多少记录,每次都会显示“请选择用户”的错误
十月CMS使用差异绑定
您可以看到您可以添加用户而不保存当前记录。由于该数据存储在中间表中,所以在创建记录后,关系数据将被传输到创建的记录中,因为现在它有了自己的ID并保存在数据库中
因此,对于解决方案您需要在该模型中手动添加验证,不同的绑定范围
首先从规则
/**
* @var array Validation rules
*/
public $rules = [
'user' => 'required' <-- Remove this
];
现在,验证可以用于两种情况,并且您可以为不同的情况添加不同的验证
现在验证将正常工作
如果您仍然发现问题,请发表评论。hmm,当您以后端形式设置此配置时,会显示什么样的UI用户字段、下拉列表或顶部带有按钮的列表、创建和链接等。。
public function beforeValidate() {
// we need to check record is created or not
if($this->id == NULL) {
// CREATE CASE
// we need to use differ binding scope as this record is not saved yet.
if($this->user()->withDeferred(post('_session_key'))->count() == 0) {
throw new \ValidationException(['user' => 'We need User !']);
}
}
else {
// UPDATE CASE
// now record is created so we dont need differ binding
if($this->user()->count() == 0) {
throw new \ValidationException(['user' => 'We need User !']);
}
}
}