/** * 返回处理后的错误信息 * * // 从message/forms/authorize.php读取错误信息 * $errors = $validation->errors('forms/login'); * * @param string $file 要读取的消息文本 * @param mixed $translate 是否翻译 * @return array */ public function errors($file = null, $translate = true) { if (null === $file) { if (!$this->getErrorFileName()) { return $this->_errors; } $file = $this->getErrorFileName(); } $messages = []; foreach ($this->_errors as $field => $set) { $error = array_shift($set); $params = array_shift($set); $label = $this->_labels[$field]; if ($translate) { $label = is_string($translate) ? __($label, null, $translate) : __($label); } $values = [':field' => $label, ':value' => Arr::get((array) $this, $field)]; if (is_array($values[':value'])) { $values[':value'] = implode(', ', Arr::flatten($values[':value'])); } if ($params) { foreach ($params as $key => $value) { if (is_array($value)) { $value = implode(', ', Arr::flatten($value)); } elseif (is_object($value)) { // 消息文件中不能使用对象 continue; } if (isset($this->_labels[$value])) { // 使用标签值作为值 $value = $this->_labels[$value]; if ($translate) { $value = is_string($translate) ? __($value, null, $translate) : __($value); } } // 绑定参数,从1开始 $values[':param' . ($key + 1)] = $value; } } // 直接读消息文本 $message = Message::load($file, "{$field}.{$error}"); // 尝试读取字段的默认说明 if (!$message) { $message = Message::load($file, "{$field}.default"); } // 尝试读取这个错误的通用提示 if (!$message) { $message = Message::load($file, $error); } // 从默认的校验错误列表中读取信息 if (!$message) { $message = Message::load('validation', $error); } // 最后都还是不行,那就直接返回 if (!$message) { $message = "{$file}.{$field}.{$error}"; } if ($translate) { $message = is_string($translate) ? __($message, $values, $translate) : __($message, $values); } else { $message = strtr($message, $values); } $messages[$field] = $message; } return $messages; }
/** * 测试[Arr::flatten] * * @dataProvider dataFlatten * @param mixed $arr * @param mixed $expected */ public function testFlatten($arr, $expected) { $this->assertEquals($expected, Arr::flatten($arr)); }