我有个模特,$userModel
。我想检查这个模型的字段的、或null
是否为空。
现在我正在用一个大的if声明来做这件事。
if(!empty($userModel->name) && !empty($userModel->address) ... && !empty($userModel->email))
{
// All fields have values
}
这种方式是可行的,但是如果以后我需要向模型中添加另一个字段,那么我需要返回到if,并在那里添加另一个&&
条件。
我怎么能在一张支票里做到这一点?
有什么像:$userModel::model()->areAllFieldsFilled();
吗?
额外信息:模型已经保存在db中,不需要用户输入。这只是我检查一个特定模型有多完整,绝不是所有这些字段都需要在数据库中,只有少数几个。像$userModel->bio
这样的东西通常是留给null
的。
我想避免检查5-10个字段。我不想一个巨人,如果这必须维持当模型改变。。
发布于 2015-06-18 08:36:06
PHP允许您使用迭代对象的属性。可以使用空()简化每个属性的检查。
$allHaveValues = TRUE;
foreach ($userModel as $key => $value) {
if (empty($value)) {
$allHaveValues = FALSE;
break;
}
}
if ($allHaveValues) {
// Do something...
}
发布于 2015-06-18 08:31:58
使用empty()
if(!empty($userModel->name)) { .. }
空() DOCS
更新
$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))) { .. }
intersect()
发布于 2015-06-18 08:43:15
我觉得你不需要这么做。
所有你需要的-它只是指定你的验证规则。
例如:
<?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', 'on' => 'insert']
)。
https://stackoverflow.com/questions/30910210
复制相似问题