Beispiel #1
0
 /**
  * 返回处理后的错误信息
  *
  *     // 从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;
 }
Beispiel #2
0
 /**
  * 测试[Arr::flatten]
  *
  * @dataProvider dataFlatten
  * @param mixed $arr
  * @param mixed $expected
  */
 public function testFlatten($arr, $expected)
 {
     $this->assertEquals($expected, Arr::flatten($arr));
 }