Validation 类別

类別幫助你驗證使用者輸入,如果你想要同時建立一个表单&它的驗證, 使用 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 = '')

取回错误訊息并允許改寫。

靜態
參数
參数 类型 預設 描述
$msg false|字串
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.');