/** * 返回处理后的错误信息 * * // 从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; }
<?php use tourze\Base\Config; use tourze\Base\I18n; use tourze\Base\Message; if (is_file(__DIR__ . '/vendor/autoload.php')) { require __DIR__ . '/vendor/autoload.php'; } // 指定配置加载目录 Config::addPath(__DIR__ . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR); // 语言文件目录 I18n::addPath(__DIR__ . DIRECTORY_SEPARATOR . 'i18n' . DIRECTORY_SEPARATOR); // Message目录 Message::addPath(__DIR__ . DIRECTORY_SEPARATOR . 'message' . DIRECTORY_SEPARATOR);