我目前正在进行第一次冒险进入FuelPHP,并且想知道如何在模型中标记某些键(例如用户名),以及是否可以使用油来标记。特别是在模型中的验证方面,例如:
protected static $_properties = array(
'id',
'name' => array(
'data_type' => 'string',
'label' => 'Name',
'validation' => array('required', 'max_length'=>array(100), 'min_length'=>array(10)) //validation rules
),
'username' => array(
'data_type' => 'string',
'label' => 'Username',
'validation' => array('required', 'unique') // does this work?
)
)
答案 0 :(得分:4)
如果有一个框架定义的验证规则称为“唯一”,那将是有效的。但没有。
文档中有一个示例(http://docs.fuelphp.com/classes/validation/validation.html#/extending_validation),其中介绍了如何添加自定义规则,并使用“唯一”作为示例。 / p>
答案 1 :(得分:0)
我遇到了这个问题,不包括我正在更新的当前记录。所以为了解决这个问题,我“稍微”了一下。
这适用于Model_Crud,它应该与其他人一起使用,稍加适应。
protected static $_rules = array(
'uniqueField' => 'unique[Model_Product,code]', //unique[Model,fieldToCheck]
);
public static function _validation_unique($val, $model, $field)
{
if (empty($val))
return true;
$findOpts = array(
'where' => array(
array($field, '=', $val)
)
);
$input = \Validation::active()->input();
if (! empty($input['id']))
$findOpts['where'][] = array('id', '<>', $input['id']);
\Validation::active()->set_message('unique', 'The field :label must be unique, but :value has already been used');
//Model_Crud provides a find method which I use to find any of the duplicates
$obj = call_user_func(array($model, 'find'), $findOpts);
return ! count($obj) > 0;
}