偷懶之 validator 驗證器免寫 messages 自動中文輸出

WZY發表於2020-04-30

實現以下結果
偷懶之validator驗證器免寫messages自動中文輸出

validator轉換為中文輸出

  1. 把 resources\lang 下en 的資料夾 複製在同一目錄並改名為 zn

  2. 把zn中的 validation.php檔案修改為 點我檢視 中的內容。

  3. 修改config 目錄下的app.php 檔案

     'locale' => 'en',
     修改為
     'locale' => 'zn',

這個時候還不夠會出現以下效果

偷懶之validator驗證器免寫messages自動中文輸出

監聽全域性錯誤

在app/Exceptions/Handler.php中render方法監聽ValidationException異常

 public function render($request, Throwable $exception)
    {
       if ($exception instanceof ValidationException) { // 驗證器驗證失敗
            $errors =  $this->replace_err_msg($exception->errors());
            return $this->error(BaseMsg::FORM_VALIDATE_FAIL,null, $errors);//這個報錯返回了 ,自行實現
        } 

        return parent::render($request, $exception);
    }
    private function replace_err_msg($arr)//替換錯誤資訊
    {
        if (is_array($arr) && !empty($arr)){
            foreach ($arr as $k=>&$v){
                $langKey = 'attribute.'.$k;
                $msg =  __($langKey);
                if ($msg !== $langKey){
                    foreach ($v as &$vv){
                        $vv =  str_replace($k,$msg,$vv);
                    }
                }
            }
        }
      return $arr;
    }

以上方法需要在resources/lang相應語言目錄下(zn/en)新增檔案attribute.php

<?php
    return [
        'username' => '使用者名稱',
        'password' => '密碼',
    ];
?>
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章