0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

同時に複数言語のバリデーションエラーメッセージを表示させたい

Last updated at Posted at 2022-06-14

仕様

下記のように日本語エラー文言 + 改行タグ + 英語エラー文言と表示させる。

:attributeを承認してください。
The :attribute must be accepted.

使い方

laravel/config/app.php
'locale' => 'en',

'locale' => 'ja_and_en',

ソースコード

laravel/lang/ja_and_en/validation.php
<?php
return error_merge(
    array_merge_recursive(
        require_once( lang_path('ja/validation.php') ),
        require_once( lang_path('en/validation.php') )
    )
);


/**
 * array_merge_recursive されたエラーファイル(validation.php等)を <br>タグで連結して返す
 *
 * 引数、戻り値共に配列型想定だが、再帰ループの中で文字列型が来るケースもあるので、タイプヒンティングは記述NG
 *
 * @param  array  $errors n次元連想配列。array_merge_recursive されたエラーファイル(validation.php等)
 * @return array n次元連想配列。array_merge_recursive されたエラーファイル(validation.php等)
 */
function error_merge($errors) {
    if ( !is_array($errors) ) {
        // none
    } else {
        // エラー文言を連結する
        if ( 2 === count($errors) && isset($errors[0], $errors[1]) ) {
            $tmp = $errors[0] . '<br>' . $errors[1];
            return $tmp;
        } else {
            foreach ($errors as $key => $value) {
                $errors[$key] = error_merge($value);
            }
        }
    }
    return $errors;
}

まとめ

  • エラーが発生する度に毎回エラー文言配列をマージしているので、マージした結果をファイルとして生成した方が良い
  • 詳しい調査せず作ったが、もっと良い方法ありそう
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?