当前位置: 首页 > 文档资料 > FuelPHP 中文文档 >

Validation 错误 - 类別

优质
小牛编辑
135浏览
2023-12-01

类别帮助你验证使用者输入,如果你想要同时建立一个表单&它的验证, 使用 Fieldset 类别代替。

错误讯息

错误被回传做为 Validation_Error 物件,你可以使用更加灵活的输出, 如果你不需要它,只要转换 Validation_Error 物件为一个字串来取得错误讯息。

错误讯息是使用一个自动载入的语言档案 "validation.php" 来设定。

有两种方式在验证过程中操纵错误讯息。

// 为特定的 validation 物件变更错误讯息
$val->set_message('required', 'The field :label is required.');

// 或为特定栏位变更讯息,不管实际上的错误
echo $val->error('username')->get_message('The field :label must be filled out before auth is attempted.');
// 输出 "The field Your username must be filled out before auth is attempted." 当验证 username
// 失败,或在还没验证或验证成功时没东西。

你可能已经注意到,错误讯息接受一组被栏位的特性取代的变数。 以下是一个可用变数的列表:

变数描述
:field将被栏位的名称替代。
:label将被栏位的标籤替代。
:value将被栏位的值替代,该值不能被验证。
:rule将被失败的规则替代,包含的规则将只有它们的名称, 其他的会是字串回呼(callback)或 classname:method(这也将是键, 你必须添加一个验证规则,如果你想要的话)。
:param:1将被第一个附加参数的值替代,:param:2 会是第二个, 以此类推。

回呼(callback)/闭包(closure)命名规则

完整的回呼(callback)规则或闭包(closure)也可以被命名,预设情况下,它们的名称会是:

  • Closure:"closure"
  • array($class, $method):"$class:$method"
  • array($object, $method):get_class($object).":$method"

如果你想要给它们替代的自订名称,你可以像这样做:

// 添加一个检查输入是否是偶数的规则
// 它可以使用 ->set_message('odd', ':label is not odd.') 或使用一个语言键 'validation.odd'
$field->add_rule(array('odd' => function($val) { return (bool) ($val % 2); }));

Validation Error 物件

验证回传错误物件,它实际上是在验证过程中抛出的例外。 这些物件可以被转换为字串为了取得他们的实际讯息, 或被用为物件来取回关于错误的诠释资料。

$field

$error->field 包含造成此错误的 Fieldset_Field 物件的参照。

$value

$error->value 包含验证失败的值。

$rule

$error->rule 包含失败的验证规则的名称。 对于大多数的规则来说,这会是传递做为验证规则的字串。 但当特定名称时,它也可以是另一个字串。
传递回呼(callback)像 'Class::method'array('Class', 'method')array($object, 'method'),这将是一个简化的形式: 'Classname:methodname'

$params

这将包含传递给验证规则的任何附加参数。例如, 当使用 ->add_rule('max_length', 25),这将包含 array(25)

get_message($msg = false, $open = '', $close = '')

取回错误讯息并允许改写。

静态
参数
参数类型预设描述
$msgfalse|字串
false
将尝试从所属 Validation 实例取回讯息, 或从配置取回当给 false 时。 将回传一个预设的佔位符讯息在空输入时,或当没有讯息被找到。
或者它使用所给输入做为讯息, 并取代其中的变数。
$open字串
''
在讯息之前添加 HTML。
$close字串
''
在讯息之后添加 HTML。
回传字串
範例
// 取回在 <p> 标籤里的讯息
$message = $error->get_message(false, '<p>', '</p>');

// 将使用标准讯息:Validation rule :rule failed for :label
$message = $error->get_message(null);

// 覆写任何可能已经有给的错误讯息
$message = $error->get_message('Validation failed for field :label.');