我有一个模型RegisterWindowMessage
。我想检查此模型的任何字段是否为空或$userModel
。
目前我正在做一个很大的if语句。
null
这种方式有效,但如果以后我需要在模型中添加另一个字段,那么我需要返回if并在那里添加另一个if(!empty($userModel->name) && !empty($userModel->address) ... && !empty($userModel->email))
{
// All fields have values
}
条件。
如何在一次检查中完成此操作?
是否有类似:&&
额外信息:模型已保存在数据库中,无需用户输入。这只是我检查特定模型的完整程度,绝不会在数据库中只需要几个字段。像$userModel::model()->areAllFieldsFilled();
这样的内容通常会留下$userModel->bio
。
我想避免检查5到10个字段。如果模型发生变化,我不想要一个巨人。
答案 0 :(得分:3)
PHP允许您iterate over an object's properties。可以使用empty()简化每个属性的检查:
$allHaveValues = TRUE;
foreach ($userModel as $key => $value) {
if (empty($value)) {
$allHaveValues = FALSE;
break;
}
}
if ($allHaveValues) {
// Do something...
}
答案 1 :(得分:0)
使用empty()
if(!empty($userModel->name)) { .. }
<强>更新强>
$modelData = array($userModel->name, $userModel->address, $userModel->email);
if(!in_array('', $modelData) && !in_array(null, $modelData)) { .. }
或者您可以使用array_intersect
-
if(empty(array_intersect(array('', null), $modelData))) { .. }
答案 2 :(得分:-1)
我认为你不需要这样做。
您需要的一切 - 它只是指定您的验证规则。
例如:
<?php
class Brand extends CActiveRecord
{
public function tableName()
{
return 'brand';
}
public function rules()
{
return [
['name, country', 'on' => 'insert'],
['name', 'type', 'type' => 'string', 'on' => 'insert'],
['name', 'length', 'max' => 100, 'on' => 'insert'],
['name', 'type', 'type' => 'array', 'on' => 'search'],
['country', 'type', 'type' => 'string'],
['country', 'length', 'max' => 50],
];
}
}
当您使用此模型时,您只需要$model->validate()
验证此模型,如果失败,则显示$model->getErrors()
错误。此外,您可以指定要使用的规则方案。例如:$model->senario = 'search';
将使用验证规则search
,属性name
应为数组。但是当方案insert
名称应为长度不超过100的字符串时。
在我的示例字段中:name,country - insert(['name, country', 'on' => 'insert']
)所需。